美文网首页
二叉树遍历

二叉树遍历

作者: 狼之独步 | 来源:发表于2017-01-03 23:28 被阅读88次

    中序投影法
    计算中序遍历拥有比较简单直观的投影法,如图https://baike.baidu.com/pic/二叉树遍历/9796049/0/cdbf6c81800a19d81098b19b33fa828ba71e4690?fr=lemma&ct=single#aid=0&pic=cdbf6c81800a19d81098b19b33fa828ba71e4690
    中序遍历的投影法
    遍历命名
    根据访问结点操作发生位置命名:
    ① NLR:前序遍历(PreorderTraversal亦称(先序遍历))
    ——访问根结点的操作发生在遍历其左右子树之前。
    ② LNR:中序遍历(InorderTraversal)
    ——访问根结点的操作发生在遍历其左右子树之中(间)。
    ③ LRN:后序遍历(PostorderTraversal)
    ——访问根结点的操作发生在遍历其左右子树之后。
    注意:
    由于被访问的结点必是某子树的根,所以N(Node)、L(Left subtree)和R(Right subtree)又可解释为根、根的左子树和根的右子树。NLR、LNR和LRN分别又称为先根遍历、中根遍历和后根遍历。
    遍历算法
    1.先(根)序遍历的递归算法定义:
    若二叉树非空,则依次执行如下操作:
    ⑴ 访问根结点;
    ⑵ 遍历左子树;
    ⑶ 遍历右子树。
    2.中(根)序遍历的递归算法定义:
    若二叉树非空,则依次执行如下操作:
    ⑴遍历左子树;
    ⑵访问根结点;
    ⑶遍历右子树。
    3.后(根)序遍历得递归算法定义:
    若二叉树非空,则依次执行如下操作:
    ⑴遍历左子树;
    ⑵遍历右子树;
    ⑶访问根结点。
    中序算法实现
    用二叉链表做为存储结构,中序遍历算法可描述为:
    void InOrder(BinTree T)
    { //算法里①~⑥是为了说明执行过程加入的标号
    ① if(T) { // 如果二叉树非空
    ② InOrder(T->lchild);
    ③ printf("%c",T->data); // 访问结点
    ④ InOrder(T->rchild);
    ⑤ }
    ⑥ } // InOrder
    中序投影法
    计算中序遍历拥有比较简单直观的投影法,如图
    中序遍历的投影法
    中序遍历的投影法
    层序遍历
    除了先序遍历、中序遍历、后序遍历外,还可以对二叉树进行层序遍历。设二叉树的根节点所在层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。

    相关文章

      网友评论

          本文标题:二叉树遍历

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