对二叉树遍历操作的深入思考

对二叉树遍历操作的深入思考

已知某棵二叉树,容易求得它的某种遍历序列,但是,反过来,若已知某种遍历序列,是否可以唯一确定一棵二叉树呢?

1、若已知先/中/后序序列......

例:已知先序列为0-1-2-3-4-5-6-7-8

对应情况:

可以看到,两幅图片虽然先序是一样的,但两棵树完全是不同的两棵树。

2、若已知中序和后序序列......

例:

已知中序遍历:B D C E A F H G

已知后序遍历:D E C B H G F A

结果:

推断过程:

  • (1)从后序遍历表中以及后序的性质,可以判定A是根

  • (2)从中序遍历表中以及中序的性质,加以条件(1)以知道BDCE是A的左子数,FHG是A的右子树

  • (3)先看FGH,在后序遍历中可以看到顺序是HGF可以说明F是A的右结点;看中序遍历可以看到顺序是FHG,如果F有左子结点的话,根据中序遍历的性质,中序遍历表中A的后面绝逼不是F,但结果是F,说明F没有左结点;要实现在中序遍历中,F后面的结点排布是H G的话,就要使H是G的左节点,综上所述,这一步可以得到这么个结果:

  • (4)再看BDCE,从中序遍历可以看到顺序为:BDCE,若B有左子结点,则第一个不会是B,说明B并没有左子结点;从后序遍历中可以看到,顺序为:DECB,说明B是A的左子结点;剩下DCE,根据中序遍历,我有两种猜想

但是根据后序遍历所示,顺序为:DEC,对于第一种猜想,应该E是D的根,与猜想1的情况出入,因此猜想2为正确的,综上所述,可以得到这么个结果:

因此可以得到一条定律:后序定根,中序分左右。

3、若已知中序和先序序列......

例:

已知中序遍历:G D H B A E C I F

已知先序遍历:A B D G H C E F I

结果:

推断过程:

类似上面的运用两种遍历方法的性质和遍历表的排布,我就懒得写了,推一推就出来了...

4、若已知先序和后序序列......
例:

二叉树前序遍历为ABDEGCFH,后序序列为DGEBHFCA
可以确定第一个根节点是A,A第一个子树根节点是B,根节点为B的子树后序遍历为DGEB,前序遍历为BDEG,A第二个子树根节点为C,他的后序遍历为HFC,前序遍历为CFH,然后一次递归。简单起见,我们只看A第二个子树,即右子树C。C的第一个根节点F,子树F的后序遍历HF,前序遍历FH,C没有第二个子树,这时不管F为左子树还是右子树都是满足要求的。同理F的子树H。

图中只有一个子树的用两条线连接,表示这是左右子树均可。

最后结论:中序+先序,或中序+后序均能唯一确定一棵二叉树,但先序+后序却不一定能唯一确定一棵二叉树。

posted @ 2017-10-21 08:18  FunnyOne  阅读(454)  评论(0编辑  收藏  举报