zoukankan      html  css  js  c++  java
  • 刷题笔记——前序、中序、后序遍历知二求一

    前序、中序、后序遍历知二求一是二叉树中的必考点。为了能够发现规律,不用每次都费劲地推算,特整理如下:

    首先回顾一下三种遍历的特点:

    前序遍历:根左右
    中序遍历:左根右
    后序遍历:左右根

    已知前序、中序遍历,求后序遍历

    【分析】:
    前序:HGEDBFCA
    中序:EGBDHFAC

    1、根据前序序列的特点(根左右),可知H是整个树的根。
    (至此作为选择题而言,已经可以选出正确答案B了。但我们的目标是求出后序序列)

    2、根据中序序列的特点(左根右),可知,EGBD位于树的左子树,FAC位于树的右子树。

    3、又因为前序序列的特点可知树根后面紧接着的应当是左子树的树根。所以G是左子树的树根。

    4、由F是右子树在前序序列中出现的第一个,根据前序序列的特点(根左右),可知F是右子树的树根。

    5、再对G重复2~4步:
    5->2 G作为根时,中序序列G的左边是它的左子树,可知只有E一个节点。G右边到H之前的都是G的右子树。可知有B、D。
    5->3 E作为G的叶子节点,无需判断左子树树根。
    5->4 由D是G的右子树在前序序列中出现的第一个,根据前序序列的特点(根左右),可知D是G的右子树的树根。

    6、由于中序序列中,B先于D出现,且D是根,所以B为D的左子树节点。

    7、对F重复2~4步,得到最终结果:

    后序序列为:EBDGACFH

    总结(划重点!!!):
    前序的第一个是整个树的根
    后序的最后一个是整个树的根
    中序用来判别左右子树的划分
    前序序列中左子树部分的第一个节点是左子树的根节点
    前序序列中右子树部分的第一个节点是右子树的根节点

    为什么已知前序、后序无法求中序?

    证明一件事是对的很难,证明一件事是错的很简单,比如,举个栗子说明它不对就完了。

    如下前序 ab 后序ba

       a   或者  a
      /            
     b             b
    

    中序是ba 或者ab,所以是不知道中序的。

  • 相关阅读:
    Could not get lock /var/lib/apt/lists/lock
    使用vmware提示无法打开内核设备 \.Globalvmx86: 系统找不到指定的文件
    Linux 下安装 MATLAB
    超级干货:Linux常用命令 & 实用命令万字总结!
    GNB 配置图图解
    GNB Linux 部署说明
    解决Firefox启动、打开网页慢、占用内存多
    【Git教程】如何清除git仓库的所有提交记录,成为一个新的干净仓库
    mount --bind和硬连接的区别
    彻底删除 Windows Defender
  • 原文地址:https://www.cnblogs.com/littlehb/p/15089114.html
Copyright © 2011-2022 走看看