根据前序遍历(或者是后序遍历)和中序遍历得到的序列可以重建二叉树

时间:2022-05-20 11:26:58

前面提到可以利用前序遍历(或者后序遍历)和中序遍历唯一的决定一棵二叉树。 这是一一对应的关系。 我们利用这一事实用于确定一棵树是另一棵树的子树。

在这里我们利用给定树的两个遍历序列(中序遍历必须有, 前序或者后续遍历给定一个)。 激动不根据前序遍历(或者是后序遍历)和中序遍历得到的序列可以重建二叉树

闲话少说, 直接上例子:

给定如下一棵二叉树的后序遍历和中序遍历两个序列如下:

In-Oder: 10, 30, 40, 50, 60, 70, 90

Post-Oder: 10,  40,  30,  60,  90,  70,  50

后序遍历和前序遍历的定义都知道。 我们有如下观察:

后序遍历: 左子树, 右子树, 根节点(某一任意节点)

中序遍历: 左子树, 根节点, 右子树

具体细节不说了。 所以在后序遍历序列的最后元素对应根节点。 该根节点在中序遍历中将中序遍历数组分成两部分, 左边的对应左子树, 右边的对应右子树。

重建步骤如下:

根据前序遍历(或者是后序遍历)和中序遍历得到的序列可以重建二叉树

然后开始重建二叉树:

根据前序遍历(或者是后序遍历)和中序遍历得到的序列可以重建二叉树

然后递归进行下去:

根据前序遍历(或者是后序遍历)和中序遍历得到的序列可以重建二叉树

最后, 如下:

根据前序遍历(或者是后序遍历)和中序遍历得到的序列可以重建二叉树