遍历序列唯一确定二叉树的问题

二叉树遍历与重构
本文探讨了根据二叉树的不同遍历序列(前序、中序、后序)来唯一确定一棵二叉树的可能性,并给出了详细的证明过程。特别地,文章分析了前序+中序、中序+后序序列组合的独特性,同时也指出了前序+后序序列无法唯一确定二叉树的原因。

数据结构的基础知识中重要的一点就是能否根据两种不同遍历序列的组合(有三种:前序+中序,前序+后序,中序+后序),唯一的确定一棵二叉树。然后就是根据二叉树的不同遍历序列(前序、中序、后序),重构二叉树。

下面是这个问题的证明与结论:

给定二叉树结点的前序序列和对称序(中序)序列,可以唯一确定该二叉树
证明:因为前序序列的第一个元素是根结点,该元素将二叉树中序序列分成两部分,左边(设1个元素)表示左子树,若左边无元素,则说明左子树为空;右边(设r个元素)是右子树,若为空,则右子树为空。根据前序遍历中
"根-左子树-右子树"
的顺序,则由从第二元素开始的1个结点序列和中序序列根左边的1个结点序列构造左子树,由前序序列最后r个元素序列与中序序列根右边的r个元素序列构造右子树。

②由中序序列和先序序列能唯一确定一棵二叉树,但是由先序序列和后序序列不能唯一确定一棵二叉树,因无法确定左右子树两部分。
反例:任何结点只有左子树的二叉树和任何结点只有右子树的二叉树,其前序序列相同,后序序列相同,但却是两棵不同的二叉树。

③已经说明由二叉树的前序序列和中序序列可以确定一棵二叉树,现在来证明由二叉树的中序序列和后序序列,也可以唯一确定一棵二叉树。

证明:
当n
=
1时,只有一个根结点,由中序序列和后序序列可以确定这棵二叉树。

设当n
=m-1时结论成立,现证明当n=
m时结论成立。

设中序序列为S1,S2,…,Sm,后序序列是P1,P2,…,Pm。因后序序列最后一个元素Pm是根,则在中序序列中可找到与Pm相等的结点(设二叉树中各结点互不相同)Si(
1≤i≤m),因中序序列是由中序遍历而得,所以Si是根结点,S1,S2,…,Si-1是左子树的中序序列,而Si+1,Si+2
,…,Sm是右子树的中序序列。

若i
=1,则S1是根,这时二叉树的左子树为空,右子树的结点数是m-1,则{S2,S3,…,Sm}和{P1,P2,…,Pm-1
}可以唯一确定右子树,从而也确定了二叉树。

若i
=m,则Sm是根,这时二叉树的右子树为空,左子树的结点数是m-1,则{S1,S2,…,Sm-1}和{P1,P2,…,Pm-1
}唯一确定左子树,从而也确定了二叉树。

最后,当1<i<m时,Si把中序序列分成{S1,S2,…,Si
-1}和{Si+1,Si+2,…,Sm}。由于后序遍历是"左子树-右子树-根结点",所以{P1,P2,…,Pi-1}和{Pi,Pi+1,…Pm-1}是二叉树的左子树和右子树的后序遍历序列。因而由{S1,S2,…,Si-1}和{P1,P2,…,Pi-1}可唯一确定二叉树的左子树,由{Si+1,Si+2,…,Sm}和{Pi,Pi+1,…,Pm-1}可唯一确定二叉树的右子树。

至于构造的代码,网上可以去找,很多很多,这里就不再重复劳动了。






转载于:https://www.cnblogs.com/microgrape/archive/2011/05/11/2043812.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值