遍历二叉树

/*
6.8 遍历二叉树
二叉树的遍历方式可以很多,如果我们限制了 从左到右二的 习惯方式,那么主要分为四种:
    1.前序遍历  ABDGH-CEIF
    2.中序遍历  GDHBAE-ICF
    3.后序遍历  GHDBIEFCA
    4.层序遍历  ABCDEFGHI

        下图二叉树 详看p313-316 图
                A
            B       C
          D       E     F
        G   H       I
说明:这不要硬记,这只是给一个通用的规则,方便对二叉树进行遍历而已

有同学会说,研究这么多遍历的方法干什么呢?
我们用图形的方式表现树的结构,应该说是非常直观和容易理解,但是对于计算机来说,它只有循环、判断等方式来处理,也就是说,
它只会处理线性序列,而我们刚才提到的四种遍历方法,其实都是在把树中的结点变成某种意义的线性序列,这就给程序实现带来了好处。
另外不同的遍历提供了对结点依次处理的不同方式,可以在遍历过程中对结点进行各种处理。
*/

/*
6.8.3 前序遍历算法
二叉树的定义是递归的方式,所以,实现遍历算法也可以采用递归,而且极其简洁明了。
*/
//二叉树的前序遍历递归算法
void PreOrderTraverse(BiTree T)
{
    if(T == NULL)
        return;
    //显示结点数据,可以更改为其他对节点操作
    printf("%c", T->data);
    //再先序遍历左子树
    PreOrderTraverse(T->lchild);
    //再后续遍历右子树
    PreOrderTraverse(T->rchild);
}

/*
6.8.4 中序遍历算法
那么中序遍历算法是如何的呢? 别以为很复杂,它和前序遍历算法仅仅只是代码的顺序上的差异。
*/
//二叉树的中序遍历递归算法
void InOrderTraverse(BiTree T)
{
    if (T == NULL)
        return;
    //中序遍历左子树
    InOrderTraverse(T->lchild);
    //显示节点数据,可以更改为其他对节点操作
    printf("%c", T->data);
    //最后中序遍历右子树
    InOrderTraverse(T->rchild);
}

/*
6.8.5 后续遍历算法
*/
void PostOrderTraverse(BiTree T)
{
    if (T == NULL)
        return;
    //先后序遍历左子树
    PostOrderTraverse(T->lchild);
    //在后序遍历右子树
    PostOrderTraverse(T->rchild);
    //显示结点数据,可以更改为其他对结点操作
    printf("%c". T->data);
}

 

你可能感兴趣的:(遍历二叉树)