1、分析已知先中序的情况:
思路:先序序列中,根结点排在最前,然后在中序序列中考虑根结点左右两个子序列,它们分
别为左右子树的中序。
假设树的先序与中序为:
先:ABCD
中:ACBD
A为根结点,CBD为A的右子树中序序列。
问题简化为:
先BCD
中CBD
同理:B为根结点,C在B左是,D在B右则
简化为
先CD
中CD
此时C为根,D为右子结点。
A
\
B
/ \
C D
2、分析已知中后序的情况:
思路:对于后序序列,最后一个一定是要结点,然后在中序序列中考虑根结点左右两个子序列,它们分
别为左右子树的中序。
假设:
中:BADC
后:BDCA
中:BADC 后:BDCA ==> A为根,中序BADC拆成 B与DC,此时确定了B为A的孩子,简化后,后序剩DC,中
序剩DC,此时C为根,再根据中序中D在C的左则,所以D为C左孩子。
结果为:
A
/ \
B C
/
D
问题扩展:
1,只有先序和中序 或 中序和后序可以确定一颗树。先序和后序确定不了一颗树。
2,如何根据中序和后序确定一颗树呢?
方法跟上面的由先序和中序确定一颗树的思想大同小异。
例如:中序:BEDAC 后序: EDBCA
<---------找根的方向
先是A是根,故有根A,左子树为BED 右子树为C
然后是C为根,C的左右子树均为空。
然后是B为根,B的左子树为空,右子树为ED
然后是D为根,D的左子树为E,右子树为空。
然后是E为根,左右子树均为空。
根据上面几个步骤就可以将确定的树画出来。
转载于:https://blog.51cto.com/hdjdcyl/1147822