网上逛帖子,看到的东东,回忆了一下,拿着前序和中序构建不出树来,所以找些帖子学习学习,重温一下
假设某二叉树的先序遍历序列是abdgcefh,中序遍历序列是dgbaechf,画出二叉树,并给出其后序遍历序列。
分析:
先序遍历序列的第一个字符为根结点。
中序遍历,根结点在中序遍历序列的中间,左边部分是根结点的左子树的中序遍历序列,右边部分是根结点的右子树的中序遍历序列。
先序:abdgcefh --> a bdg cefh
中序:dgbaechf --> dgb a echf
得出结论:a是树根,a有左子树和右子树,左子树有bdg结点,右子树有cefh结点。
先序:bdg --> b dg
中序:dgb --> dg b
得出结论:b是左子树的根结点,b无右子树,有左子树。
先序:dg --> d g
中序:dg --> d g
得出结论:d是b的左子树的根结点,d无左子树,有右子树。
先序:cefh --> c e fh
中序:echf --> e c hf
得出结论:c是右子树的根结点,c有左子树(只有e结点),有右子树(有fh结点)。
改正:斜线上chf改为hf(截图不好改)
先序:fh --> f h
中序:hf --> h f
得出结论:f是c的左子树的根结点,f有左子树(只有h结点),无右子树。
所以最后的图是
同理如果我们知道中序是dgbaechf, 后序是gdbehfca
后序的最后一个(a)是根,然后根据中序 dgb a echf , 所以
a
dgb echf
通过后序的gdb 知道 b是根, 然后根据中序遍历 dg b, 所以
b
dg
通过后序的gd知道 d是根, 然后根据中序遍历 g d, 所以
d
g
左子树构建结束,开始构建右子树 [中序是dgbaechf, 后序是gdbehfca]
根据后序的ehfc知道c是根,然后根据中序遍历 e c hf, 所以
c
e hf
根据后序的hf知道 f是根,然后根据中序遍历 h f, 所以
f
h
<已知树的前序中序求后序,或者已知树的中序后序求前序(2)>中会用程序实现.