美文网首页
数据结构笔记-树

数据结构笔记-树

作者: Veahow | 来源:发表于2018-12-01 21:25 被阅读0次

树 Tree

一、存储

  • 伪代码
typedef struct BiTNode{
    ElementType data;    // 结点元素数据
    struct BiTNode *lchild, *rchild;    // 左孩子右孩子指针
}*BiTree;
  • C语言实例(部分代码)
typedef int ElementType;

typedef struct BiTNode{
    ElementType data;    // 结点元素数据
    struct BiTNode *lchild, *rchild;    // 左孩子右孩子指针
}*BiTree;

二、遍历/搜索

1.先序遍历(DLR)

  • 伪代码
    (1)递归
void PreOrder(BiTree T)
{
    if(T != NULL){
        Visit(T);    // 访问根节点
        PreOrder(T->lchild);    // 递归遍历左孩子
        PreOrder(T->rchild);    // 递归遍历右孩子
    }
}

(2)非递归(使用栈)

void PreOrder(BiTree T)
{
    Stack S;
    InitStack(S);
    BiTree p = T;
    while(p || !isEmpty(S)){
        if(p){
            Push(S, p);
            Visit(p);
            p = p->lchild;
        }else{
            Pop(S, p);
            p = p->rchild;
        }    // else
    }    // while
}

2.中序遍历(LDR)

  • 伪代码
    (1)递归
void InOrder(BiTree T)
{
    if(T != NULL){
        PreOrder(T->lchild);    // 递归遍历左孩子
        Visit(T);    // 访问根节点
        PreOrder(T->rchild);    // 递归遍历右孩子
    }
}

(2)非递归(使用栈)

void InOrder(BiTree T)
{
    Stack S;
    InitStack(S);
    BiTree p = T;
    while(p || !isEmpty(S)){
        if(p){
            Push(S, p);
            p = p->lchild;
        }else{
            Pop(S, p);
            Visit(p);
            p = p->rchild;
        }    // else
    }    // while
}

3.后序遍历(LRD)

  • 伪代码
    (1)递归
void PostOrder(BiTree T)
{
    if(T != NULL){
        PreOrder(T->lchild);    // 递归遍历左孩子
        PreOrder(T->rchild);    // 递归遍历右孩子
        Visit(T);    // 访问根节点
    }
}

(2)非递归(使用栈)

void PostOrder(BiTree T)
{
    Stack S;
    InitStack(S);
    BiTree p = T, r = NULL;
    while(p || !isEmpty(S)){
        if(p){
            Push(S, p);
            p = p->lchild;
        }else{
            Top(S, p);
            if(p->rchild != NULL && p->rchild != r){
                p = p->rchild;
                Push(S, p);
                p = p->lchild;
            }else{
                Pop(S, p);
                Visit(p);
                r = p;
                p = NULL;
            }    // else2
        }    // else1
    }    // while
}

4.层序遍历

  • 伪代码(非递归,使用队列)
void LevelOrder(BiTree T)
{
    Queue Q;
    InitQueue(Q);

    BiTree p;
    if(T != NULL){
        EnQueue(Q, T);
        while(!isEmpty(Q)){
            p = DeQueue(Q);
            Visit(p);
            if(p->lchild) EnQueue(Q, p->lchild);
            if(p->rchild) EnQueue(Q, p->rchild);
        }    // while
    }    // if
}

相关文章

  • 算法学习

    数据结构学习笔记:树与树的表示、二叉树及其遍历、二叉搜索树、平衡二叉树、堆、哈夫曼树、集合及其运算算法学习笔记浅谈...

  • 数据结构笔记-树

    树 Tree 一、存储 伪代码 C语言实例(部分代码) 二、遍历/搜索 1.先序遍历(DLR) 伪代码(1)递归 ...

  • [笔记]数据结构-树

    预备知识 树可以用几种方式定义。 定义树的一种自然的方式是递归的方法。 一棵树是一些节点的集合。 这个集合可以是空...

  • 数据结构笔记 - 树

    背景 这篇文章主要记录?的相关知识。最近又重新读了一遍数据结构的课本及相关读物,因此想记录一些基本的知识点。 1....

  • 数据结构-笔记-树

    树的定义 树(tree):n(n>=0)个结点构成的有限集合. 当n=0时,称为空树; 对于任一棵非空树(n>0)...

  • 数据结构-树-笔记

    * 满二叉树:最后一层没有子节点,其余每个节点都有两个子节点* 完全二叉树:除最后一层的其余部分为满二叉树,最后一...

  • 数据结构 - 概要

    数组 链表 堆/栈/队列 树 数据结构 - 二叉树数据结构 - 二叉查找树数据结构 - 平衡二叉树数据结构 - A...

  • 数据结构与算法大纲

    王争课程笔记 10 个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树 10 个算法:递归...

  • 数据结构回顾学习-基础知识

    数据结构回顾学习笔记 这次数据结构回顾笔记,是我对数据结构回顾学习的笔记。回顾过程是参考易百教程网站上数据结构教程...

  • 大师兄的数据结构学习笔记(十三): KD树

    大师兄的数据结构学习笔记(十二): 红黑树[https://www.jianshu.com/p/c15034771...

网友评论

      本文标题:数据结构笔记-树

      本文链接:https://www.haomeiwen.com/subject/aqgrcqtx.html