先序遍历和后序遍历为什么不能唯一地确定一棵树?【fix文章的一些逗号错误,更容易阅读】

原文:

https://blog.csdn.net/Oeljeklaus/article/details/80145597


结论:

  1. 如果树中只存在度为0和度为2的节点,则根据它的前序遍历和后序遍历序列,可以重构树的结构
  2. 存在1 度的节点,那么不能重构出一个唯一的树

Fixed 原文

以前大学学数据结果的时候,我们就知道,根据一棵树的先序遍历和中序遍历,或者后序遍历和中序遍历序列,都可以唯一地确定一棵树。

树中的节点,分为度为0,1,2的结点。如果树中只有一个节点,那么可以唯一确定一棵树,即只有一个节点的树。

当树中结点个数大于等于2的情况,树中的叶子结点和它的父亲结点中,至少有一种存在如下的情况。(为方便起见,我们先从叶子节点入手)

         case 1:                             case2:                      case 3:

             A                                    D                                   F

          /     \                                 /                                        \

       B       C                            E                                          G

即,叶子结点的父亲有两个孩子,只有左孩子,只有右孩子的情况。我们只需要证明,如果树存在这三种结构中的哪一种,可以唯一确定一棵树,什么情况下又不能唯一确定一棵树呢?

  1.   case 1:   
    
              A       
    
           /     \     
    
        B       C        
    

前序遍历: ABC, 后序遍历: BCA

现在,我们根据遍历序列,看看能否得到另一种树的结构?

由于在前序遍历中A第一个出现,则A为这棵树的根节点。(前: A BC 后: BC A)

接下来,我们看,BC可以只在A的左子树或者右子树中出现吗?

如果BC只出现在树的左子树或者右子树中,则根据前序遍历, B应为子树的树,C为B的孩子。则后序遍历时,C应在B的前面。但实际的后序遍历,C在B的后面。因此,BC不可能只出现在A的左子树或者右子树当中。因此,在这种情况下,可以唯一确定树的结构。

  1. case 2:
    
                     D
    
                   /
    
                E
    

前序遍历: DE, 后序遍历: ED

则下面树的结构也满足前序和后序遍历的序列。

                    D

                      \

                        E

即这种情况,不能唯一确定一棵树。

  1.   case 3:  
    

同case 2情况相似,也不能唯一确定一棵树。

我们可以把叶子结点推广成一棵树的情况,即如果树中只存在度为0和度为2的节点,则根据它的前序遍历和后序遍历序列,可以重构树的结构。否则不能唯一重构树。那如果给你一个前序和后序遍历的序列,我们如何来判断,它是否可以唯一地构造一棵树呢?

即我们根据遍历序列,来看看树中,如果所有结点的度为0或者2,则可以唯一还原。

例: 前序: ABDFGEC 后序: FGDEBCA

第一步: 根结点为A

第二步: 根据前后序序列,B为A的左子树的根,根据后序序列 将整个序列分为两部分: FGDEB, C 。即A有两个孩子。

第三步: 继续看以B为树的树,前序为 BDFGE, 后序: FGDEB 。 按照分析A的方法来分析 B,最后得知,这棵树可以唯一确定。

如下所示

				                   A                               
				
				              /          \                           
				           B            C  
				         /   \
                       D     E 
                     /  \
                   F   G

但是如果把上面序列中的结点C给去掉,即:前序: ABDFGE 后序: FGDEBA, 此时就不能唯一确定了。

因为可以是

				                   A                               
				
				              /                             
				           B           
				         /   \
                       D     E 
                     /  \
                   F   G

也可以是:

				                   A                               
				
				                          \                           
								           B           
								         /   \
			                           D     E 
			                         /  \
			                       F   G

如此,我们说:因为A 是一个度的 节点,所以给定的前后序遍历,不能让我们确定一个唯一的树

发布了216 篇原创文章 · 获赞 33 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/paulkg12/article/details/102586204