首页 > 技术文章 > 已知树的前序中序求后序,或者已知树的中序后序求前序(1)

silentNight 2016-05-10 10:13 原文

网上逛帖子,看到的东东,回忆了一下,拿着前序和中序构建不出树来,所以找些帖子学习学习,重温一下

http://wenda.so.com/q/1368076805065680

假设某二叉树的先序遍历序列是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)>中会用程序实现.  

 

推荐阅读