zoukankan      html  css  js  c++  java
  • 数据结构-二叉树的遍历(类C语言描写叙述)

    遍历概念

         所谓遍历(Traversal)是指沿着某条搜索路线。依次对树中每一个结点均做一次且仅做一次訪问。訪问结点所做的操作依赖于详细的应用问题。


         遍历是二叉树上最重要的运算之中的一个,是二叉树上进行其他运算之基础。

    遍历方案

    1.遍历方案
         从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此。在任一给定结点上,能够按某种次序运行三个操作:
         (1)訪问结点本身(N),
         (2)遍历该结点的左子树(L),
         (3)遍历该结点的右子树(R)。
    以上三种操作有六种运行次序:
         NLR、LNR、LRN、NRL、RNL、RLN。


      注意:
         前三种次序与后三种次序对称。故仅仅讨论先左后右的前三种次序。



    2.三种遍历的命名
         依据訪问结点操作发生位置命名:
      ① NLR:前序遍历(PreorderTraversal亦称(先序遍历))
             ——訪问结点的操作发生在遍历其左右子树之前。
      ② LNR:中序遍历(InorderTraversal)
            ——訪问结点的操作发生在遍历其左右子树之中(间)。


       ③ LRN:后序遍历(PostorderTraversal)
            ——訪问结点的操作发生在遍历其左右子树之后。
      注意:
         因为被訪问的结点必是某子树的根。所以N(Node)、L(Left subtlee)和R(Right subtree)又可解释为根、根的左子树和根的右子树。

    NLR、LNR和LRN分别又称为先根遍历、中根遍历和后根遍历。


    遍历算法

    1.中序遍历的递归算法定义:
         若二叉树非空。则依次运行例如以下操作:
             (1)遍历左子树。
             (2)訪问根结点;
             (3)遍历右子树。

    2.先序遍历的递归算法定义:
        若二叉树非空,则依次运行例如以下操作:
             (1) 訪问根结点;
             (2) 遍历左子树;
             (3) 遍历右子树。



    3.后序遍历得递归算法定义:
        若二叉树非空。则依次运行例如以下操作:
             (1)遍历左子树。
             (2)遍历右子树。
             (3)訪问根结点。

    4.中序遍历的算法实现
         用二叉链表做为存储结构,中序遍历算法可描写叙述为:
          void InOrder(BinTree T)
            { //算法里①~⑥是为了说明运行过程增加的标号
              ① if(T) { // 假设二叉树非空
              ②    InOrder(T->lchild);
              ③    printf("%c",T->data)。 // 訪问结点
              ④    InOrder(T->rchild);
              ⑤  }
              ⑥ } // InOrder

  • 相关阅读:
    反射
    注解
    file
    exception(异常)
    MySQL问题
    maven 中 遇到的问题
    Java读取文本数字
    人民币-欧元预测(ARIMA算法)代码
    云平台项目--学习经验--jsrender前端渲染模板
    云平台项目--学习经验--BootstrapValidate表单验证插件
  • 原文地址:https://www.cnblogs.com/lytwajue/p/6885908.html
Copyright © 2011-2022 走看看