已知先序序列:A B C D E F G H I
中序序列;B C A E D G H F I
还原二叉树的结构。
首先,我们要根据先序序列和中序序列的特点:先序序列是先访问节点的值,然后是左孩子,其次是右孩子;而中序序列是先访问左孩子,再访问节点的值,再访问右孩子。
根据这个规律,首先看先序序列的A,得到这个A便是根节点,我们再中序序列中找到A,在A的左侧的序列便是左子树,A的右边部分是右子树,这取决于它的访问顺序。即左子树由BC构成,右子树由DEFGHI构成。
首先看左子树,先序序列接着访问B,在中序序列里找到B,由于中序序列是先访问左孩子,再访问节点的值,再访问右孩子,则B的左右则代表着它的左右子树。我们看到中序序列里B的左边
没有值,右边有个C,所以我们可以得出下面的结构:
A
/ \
B
\
C
这样我们的左子树就完了,我们再看右子树:
根据先序序列,右子树是DEFGHI,首先访问D,我们在中序序列里找到D,它的左边有E(不包含已经访问过的),右边有GHFI,即D节点的左子树为E,右子树为GHFI。则可得到下面的结构:
A
/ \
B D
\ / \
C E
由于D的左子树只有一个节点E,所以E没有左右子树。
继续访问先序序列里的F,找到中序序列里的F,左子树为GH,右子树为I,则可以得到下面的结构:
A
/ \
B D
\ / \
C E F
/ \
I
然后根据先序序列再找G,在中序序列中我们可以看到G有右子树H,这样我们就完成了所有的遍历,得到了最终的二叉树结构:
A
/ \
B D
\ / \
C E F
/ \
G I
\
H
跟着上面的步骤,自己走一遍应该就能掌握方法了,仅供学习交流。