《算法通关村—如何使用中序和后序来恢复一颗二叉树》
中序: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
是根节点的左子树,10 9 11 15 13 14 12
是根节点的右子树,就可以进行一个简单的划分。
接下来我们在进行左子树的划分,通过一次划分之后,我们知道左子树的中序遍历是:3 4 8 6 7 5 2
后序遍历为:8 7 6 5 4 3 2
从此可以知道2是这一次的根节点了,进行划分,就可以知道以2为根节点的树只有左节点,没有右节点,从此我们又可以画出以2 为根节点的示意图:
我们再往下看,然后就是序列:8 7 6 5 4 3
这个序列是后续遍历,所以可以这个子树的根节点是3,然后我们看上面的中序的结果可以知道以3为根节点的树,左子树为空,右子树为:4 8 6 7 5
,此时以3为根节点的中序遍历为3 4 8 6 7 5
后序为:8 7 6 5 4 3
:然后我们又可以接着往下画:
从上面的我们可以知道接下的树的中序遍历为:4 8 6 7 5
后序遍历为:8 7 6 5 4
由后序遍历可知4是根节点,又从中序遍历可知以4为根节点的树左子树为空,右子树是8 6 7 5
,可画图如下:
接着来后面的中序变为:8 6 7 5
,后序为:8 7 6 5
,由此可知5为根节点,以5为根节点的树右子树为空,左子树为8 6 7
,图如下 :
接着中序序列为8 6 7
后序序列为:8 7 6
由此可知根节点是6,左子树右子树分别是8,7,图如下:
在以1 为根节点的树中以同样的方式进行补全,就可以得到完整的树如下:
点击链接:我正在「编程导航」和朋友们讨论有趣的话题,你⼀起来吧?
也可以加我QQ(2837468248)咨询说明来意!