Exitus Acta Probat.|

DrClef

园龄:2年4个月粉丝:2关注:1

十七、二叉树的还原

一、根据遍历序列确定二叉树

由二叉树的先序序列和中序序列,或由其后序序列和中序序列均能唯一地确定一棵二叉树。

  根据定义,二叉树的先序遍历是先访问根结点,其次再按先序遍历方式遍历根结点的左子树,最后按先序遍历方式遍历根结点的右子树。这就是说,在先序序列中,第一个结点一定是二叉树的根结点。另一方面,中序遍历是先遍历左子树,然后访问根结点,最后再遍历右子树。这样,根结点在中序序列中必然将中序序列分割成两个子序列,前一个子序列是根结点的左子树的中序序列,而后一个子序列是根结点的右子树的中序序列。根据这两个子序列,在先序序列中找到对应的左子序列和右子序列。在先序序列中,左子序列的第一个结点是左子树的根结点,右子序列的第一个结点是右子树的根结点。这样,就确定了二叉树的三个结点。同时,左子树和右子树的根结点又可以分别把左子序列和右子序列划分成两个子序列,如此递归下去,当取尽先序序列中的结点时,便可以得到一棵二叉树。

同理,由二叉树的后序序列和中序序列也可唯一地确定一棵二叉树。

  因为,依据后序遍历和中序遍历的定义,后序序列的最后一个结点,就如同先序序列的第一个结点一样,可将中序序列分成两个子序列,分别为这个结点左子树的中序序列和右子树的中序序列,再拿出后序序列的倒数第二个结点,并继续分割中序序列,如此递归下去,当倒着取尽后序序列中的结点时,便可以得到一棵二叉树。

但是,由一棵二叉树的先序序列和后序序列不能唯一确定一棵二叉树,因为无法确定左右子树两部分。

所以我们可以总结出以下几点:

1. 由先序遍历(NLR)特征,在先序序列中,第一个结点一定是二叉树的根结点。

2. 由后序遍历(LNR)特征,根结点必在后序序列尾部。

3. 由中序遍历(LRN)特征,根结点必在其中间,而且其左部必全部是左子树子孙,其右部必全部是右子树子孙。

4. 由层次遍历特征,在层次遍历中,先将二叉树根节点入队,然后出队,所以根节点必是第一个结点。

 

二、例题

1. 一棵二叉树的前序遍历序列为1234567,它的中序遍历序列可能是( B )。

  A.3124567   B. 1234567   C. 4135627     D. 1463572

2. 下列序列中,不能唯一地确定一棵二叉树的是( D )。

  A.层次序列和中序序列        B.先序序列和中序序列

  C.后序序列和中序序列        D.先序序列和后序序列

3. 已知一棵二叉树的后序序列为DABEC,中序序列为DEBAC,则先序序列为( D )。

  A. ACBED  B. DECAB  C. DEABC  D. CEDBA

4. 已知一棵二叉树的先序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果( A )。

  A. CBEFDA   B. FEDCBA  C. CBEDFA  D.不确定

5. 已知一棵二叉树的层次序列为ABCDEF,中序序列为BADCFE,则先序序列为( B )。

  A. ACBEDF  B. ABCDEF   C. BDFECA     D. FCEDBA

 

三、例题参考解析

1.

  解法1:由题可知,1为根结点,2为1的孩子。对于选项A,3应为1的左孩子,前序序列应为13…,不符。类似的选项C也错误。对于选项B,2为1的右孩子,3为2的右孩子…,满足题意。对于选项D,463572应为1的右子树,2为1的右孩子,46357为2的左子树,3为2的左孩子, 46为3的左子树,57为3的右子树,前序序列4、6应相连,5、7应相连,不符。


  解法2:前序遍历时需要借助栈。二叉树的前序序列和中序序列的关系相当于以前序序列作:为入栈次序,以中序序列作为出栈次序。题中以1234567入栈;选项A,第一个出栈的是3,故1不可能在2之前出栈,错误。选项C,1不可能在3之前出栈,错误。选项D,6第三个出栈,此时栈顶元素是5,不是3,错误。故选B。


  解法3:因前序序列和中序序列可以确定一棵二叉树,所以可试着用题目中的序列构造出相应的二叉树,即可得知,只有选项B的序列可以构造出二叉树。

2.

  先序序列为NLR,后序序列为LRN,虽然可以唯一确定树的根结点,但无法划分左、右子树。

3.

  根据后序序列与中序序列可构造出二叉树,如下图所示。由图可知先序序列为CEDBA。

4.

  对于这种遍历序列问题,先根据遍历的性质排除若干项,若还无法确定答案,则再根据遍历结果得到二叉树,找到对应遍历序列。例如,在本题中,已知先序和中序遍历结果,可知本树的根结点为 A 左子树有 C 和 B ,其余为右子树,则后序遍历结果中,A 一定在最后,并且 C 和 B 一定在前面,排除答案 B 和 D 。又因先序中有 DEF ,中序中有 EDF 则 D 为这个子树的根,所以 D 在后序中排在 EF 之后,故答案为A。
  根据二叉树的递归定义,要确定二叉树,就要分别找到根结点和左、右子树。因此,根据遍历结果,必定要确定根结点位置和如何划分左、右子树,才可以确定最终的二叉树。故仅有先序和后序遍历不能唯一确定一棵二叉树,而二者之一加上中序遍历都可以唯一确定一棵二叉树。如在本题中,根据先序和中序遍历的结果确定二叉树的过程如下图所示。

5.

  可构造出二叉树如下图所示。因此,先序序列为 ABCDEF

本文作者:Haibersut

本文链接:https://www.cnblogs.com/haibersut/p/16865481.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   DrClef  阅读(708)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起