后序中序恢复二叉树

中序:3 4 8 6 7 5 2 1 10 9 11 15 13 14 12
后序:8 7 6 5 4 3 2 10 15 14 13 12 11 9 1
首先我们要知道前中后序中的前中后:指的是中间的父节点在遍历中的顺序,只要大家记住 前中后序指的就是中间节点的位置就可以了。

第一轮

后序是指中间节点在 后面,为左右中。最后面的节点是根节点,这里根节点是就 1
中序遍历是 左中右,我们通过后序 知道 根节点是 1,那么我们就可以去中序中划分左右节点了
中序序列划分:
[3 4 8 6 7 5 2]1[10 9 11 15 13 14 12]
通过中序遍历的划分我们知道了根节点的左右节点有哪些,因此我们可以在后序中分割出左右节点为:
后序:[8 7 6 5 4 3 2][10 15 14 13 12 11 9] 1

image.png

第二轮

我们继续对被分成两节的中序排列进行划分,通过中序中划分出左右子节点集 。我们去后续排序中也 可划分出左右子节点集
左 右 中
后序:[8 7 6 5 4 3 2][10 15 14 13 12 11 9] 1
我们将被划分的节点去后序遍历中对应的区块查找其中间节点,可知左边的中间节点为2,右边的中间节点为9。
因此可以在中序中再次分割出中间节点的左右节点
image.png

以此类推最终如下(5、6轮写一起了)
334516e7432553d823455a6a89256a4.jpg

总结一下:

恢复树以中序排列为主体,使用前后序辅助我们得到中间节点是哪一个。前后序中左右节点的划分是通过中序排列划分后才得知的。
总体流程如下:后序得知中间节点->去中序使用中间节点划分出中间节点和左右子节点集->将左右子节点集带入到后序中匹配得知左右子节点集中的中间节点是哪个->再去中序使用得知的中间节点划分出中间节点和其左右子节点集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值