最近面试总遇到这种根据给出的两类序遍历,然后求按另一种形式序的遍历。看来有必要好好总结下这个知识点,省的每次笔试时都得花不少时间推导。
首先,我们看看前序、中序、后序遍历的特性:
前序遍历:(根—>左—>右)
1.访问根节点
2.前序遍历左子树
3.前序遍历右子树
中序遍历:(左—>根—>右)
1.中序遍历左子树
2.访问根节点
3.中序遍历右子树
后序遍历:(左—>右—>根)
1.后序遍历左子树
2.后序遍历右子树
3.访问根节点
三序中知道其中两个就可以推出第三个,但前提是我们必须知道中序(这里是针对二叉树的,不包括二叉搜索树).因为:先序和后序给我们提供的信息是一样的--告诉我们谁是根节点,中序则告诉我们左右子树在哪儿。
例:已知先序为eacbdgf,中序为abcdefg,求后序。
由先序我们知道e为根节点,我们在中序中把左右子树括起来 --(abcd)e(fg)
同样对左子树abcd进行分析,先序为acbd,中序为abcd.--a(bcd)
递归下去就可以了
后序为bdcafge
扩展:
在2014年阿里实习生招聘试题中就有一个问题:
下面关于二叉搜索树的是否正确? 给定一棵二叉搜索树的前序和后序遍历结果,无法确定这棵二叉搜索树。 |
这个说法是错误的。
二叉树(不是搜索二叉树),必须是中根加上先根或者后根就能构造出树,但是,这里面说了是二叉搜索树,已经暗含中根了
本文转自夏雪冬日博客园博客,原文链接:http://www.cnblogs.com/heyonggang/p/3366417.html,如需转载请自行联系原作者