《算法通关村—如何使用中序和后序来恢复一颗二叉树》
中序: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)咨询说明来意!



















