给出先序和中序序列,还原二叉树的规律方法

已知先序序列: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


跟着上面的步骤,自己走一遍应该就能掌握方法了,仅供学习交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

9号信箱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值