zoukankan      html  css  js  c++  java
  • 13.遍历二叉树

    /*
    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);
    }
  • 相关阅读:
    初學C#窗口事件
    Visual Studio 2005.net 代码段(Snippet)丢失的解决方案
    使用C#代码段,提高工作效率(C# code snippet)
    同时拥有静态IP和动态IP
    让XP启动时不加载Autoexec.bat
    C#中构造函数和析构函数的用法
    C# 輸入關鍵字後按Tab鍵無法帶出相關內容
    C# 打開文件
    system.net.mail 與system.web.mail的區別
    C#中的建立事件
  • 原文地址:https://www.cnblogs.com/go-ahead-wsg/p/13246146.html
Copyright © 2011-2022 走看看