二叉树的前(先)序中序和后序遍历 以及如何通过两个序列确定唯一二叉树


最近做了一套卷子,考了二叉树的遍历。有点生疏,回顾一下,如何通过两种遍历序列确定一颗二叉树。

三种遍历

先中后表示对根节点访问的先后顺序,对子树都是先左后右。

前(先)序遍历。

遍历顺序是 根节点 ->左子树(节点)->右子树(节点)

可以理解成

  • 1 存在根节点,访问根节点
  • 2 存在左子树或节点的话,访问该节点,若存在左子树,继续执行2,直到左路走到底
  • 3 左子树访问到底,该节点只剩下右子树(节点),访问该节点。(此时可以理解成该节点左子树和右子树为空)
  • 当一个左子树遍历完。回溯到上一节点。遍历右子树。直到全部遍历完。

中序遍历。

遍历顺序是 左子树(节点) ->根节点->右子树(节点)

可以理解成当一个节点的左子树遍历完,才遍历这个节点,故需要找到最左的叶子节点开始遍历。若不存在则先遍历根节点,然后在右子树中寻找最左的叶子节点

  • 1 寻找最左边最下的叶子节点,访问该节点
  • 2 遍历完左边子树(节点),访问该节点对应的父节点。
  • 3 访问父节点后,遍历右子树(也可以当做一个新的树处理)

后序遍历。

遍历顺序是 左子树(节点) ->右子树(节点)->根节点

可以理解成当一个节点的左子树和右子树都遍历完,才遍历这个节点,同样需要找到最左的叶子节点开始遍历。

  • 1 寻找最左下的叶子节点,访问该节点
  • 2 遍历完左边子树(节点),访问该节点对应的兄弟节点。
  • 3 访问根节点
  • 4 回溯到上一层(3中的根节点作为向上一层的左或右节点)继续执行123,直到遍历到根节点

举几个例子

在这里插入图片描述
前序序列:ABCDEF
中序序列:CBDAEF
后续序列:CDBFEA
在这里插入图片描述
前序序列:ABDEFGCHI
中序序列:DBFEGACIH
后续序列:DFGEBIHCA

在这里插入图片描述
前序序列:ABCDEGF
中序序列:CBEGDFA
后续遍历:CGEFDBA

两个序列确定一个二叉树

给出一个中序序列,再给一个前序或后续序列,则可以确定一个个唯一的二叉树。

这里需要注意的是,两个序列中必须有一个中序序列才可以。 前序和后续组合无法确定唯一二叉树

根据三种遍历方式的特性,可以知道。前序遍历第一个出现的则是它的根节点。后续最后一个是根节点。而将这个节点放在中序序列中,左边则是根节点的左子树,右边是右子树。

我们用最后一个例子的前序和中序来试着确定一个唯一的二叉树。

  • 首先A是根节点,由于A在中序中位于最后,则这个二叉树没有右子树。
  • 则B是A的左节点
  • B在中序中,左边只有C,故B的左子树只有C
  • 由前序知道,D是B的右节点,同时可以把它当做是一个新的子树来分析。
  • 把ABC从中序序列中拿掉,同时D的右边只有F,则D的右子树只有F
  • 这时,只剩下E和G没有位置了。无疑,这两个位于D的左子树。
  • 这时他俩的前序序列是EG,则E是D的左节点,中序序列是EG,则G是E的右节点。
  • 完成
  • 25
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值