中序遍历+先/后序遍历创建二叉树

本文讨论了如何利用两种遍历结果(先序+中序,后序+中序)来重建二叉树。通过分析遍历特点,指出仅用一种遍历结果无法重建,而结合两种遍历可以实现重建,但先序+后序的情况存在不确定性。同时,提到了重建二叉查找树的特殊情况。
摘要由CSDN通过智能技术生成

问题描述

(1)任意给出一种二叉树的遍历结果,是否能重建这个树?
(2)任意给出两种二叉树的遍历结果,是否能重建这个树?

问题解析

问题(1)显然是不可能的,因为无论任意给出哪一种遍历结果我们都无法确定左右子树。
下面分析一下问题(2):
我们知道二叉树通常有3中遍历方式:先序,中序和后序

后序+中序

比如下面这两个序列:

in[]   = {4, 8, 2, 5, 1, 6, 3, 7}
post[] = {8, 4, 5, 2, 6, 7, 3, 1} 

1) 后序遍历的最后一个节点一定是根节点,所以找到后post[]的最后一个值作为根节点。
2) 找到“1”in[]中的位置,每一个在in[“1”]左侧的值一定分布在左子树上,每一个在in[“1”]右侧的值一定分布在右子树上。

         1
       /    \
[4,8,2,5]   [6,3,7] 

3) 递归2)
.b) 递归 in[] = {6,3,7} ;post[] = {6,7,3}
…….使得创建的树作为根节点的右子树.
….a) 递归 in[] = {4,8,2,5}; post[] = {8,4,5,2}.
…….使得创建的树作为根节点的左子树

先序+中序

同后序+中序一样的道理,只不过对于先序来讲,左侧的第一个节点是根节点。

先序+后序

先序+后序的遍历结果不能唯一的确定一棵二叉树

反例:对于只有左子树和只有右子树的二叉树来讲,他们先序和后序的遍历结果是一样的。比方说下面的两棵树先序和后序遍历结果一样,但是却是两颗完全不同的二叉树。
先序:[2,1,3]
后序:[3,1,2]

    2           2
    /            \
   1              1 
  /                \
 3                  3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值