二叉树问题 如图该二叉树的先序遍历次序为ABCDEFGH,终序遍历次序为CDBAEGFH,后序遍历次序为DCBGHFEA,不

作者&投稿:曲燕 (若有异议请与网页底部的电邮联系)
已知某二叉树先序遍历次序ABCDEFGH,中序遍历次序BDCFEAHG,其后序遍历次序和层次遍历次序为——。~

首先到先序次序中去寻找根节点,由于是先序,所以A为根节点,然后到中序次序中去寻找“A”,发现A在第6位,说明之前5位BDCFE是左子树(因为这是中序),然后再到先序中从A开始数5位BCDEF,这部分就是左子树的先序,接下来确定左子树就变成了重复以上过程:已知先序:BCDEF,中序:BDCFE,求后序,依然是先到先序中寻找根节点B,再到中序中去找...编程的话就是根据这个写递归函数;
层次遍历的话就是自上而下,自左而右依次写出来就行。

对于先序遍历stuwv, 和中序遍历uwtvs可以这么分析:

规则:
1)先序遍历确定父节点
2)中序遍历确定左右子树
分析过程:
1、由前序遍历可知s为树的根
s
tuwv
2、结合中序遍历可知:tuwv为s左子树的先序遍历, uwtv为s左子树的中序遍历
3、同理判断t为左子树的根,uw为t的左子树, v为t的右子树
s
t
uw v
4、递归判断t的左子树可知: 其先序遍历和中序遍历均为uw,判断u为子树的根节点,w为u的右孩子
s
/
t
/ \
u v
\
w
由此可知其后序遍历为:wuvts

所谓先序,中序,后序,是指,在遍历二叉树时,对于某一个节点:

  1. 先遍历自身,然后是左子节点,再右子节点的,为先序

  2. 先左子节点,后父节点,再右子节点的,为中序

  3. 先左子节点,后右子节点,再父节点的,为后序

也就是遍历父节点,在遍历左右子节点的前,中,后的三种不同的顺序


对于你的例子,如果是中序的话:

从根节点A开始,先左子节点B,对于B来说,要先遍历其左子节点C,而对于C,其没有左子节点,所以遍历自身,然后是右节点D,所以依次遍历的顺序是,CDBA,同理可推出A的右子树的顺序

后序也是同样的道理



这里的前中后,指的是根结点的所在位置,假设根节点为A,左子树为B,右子树为C。则前中后的遍历为ABC,BAC,BCA。

中序遍历先左子节点,父节点,右子节点。先把G、F、H当作一个节点起名@ ,中序遍历为E @,再遍历@,@=G、F、H, 所以结果为E G、F、H