前面提到可以利用前序遍历(或者后序遍历)和中序遍历唯一的决定一棵二叉树。 这是一一对应的关系。 我们利用这一事实用于确定一棵树是另一棵树的子树。
在这里我们利用给定树的两个遍历序列(中序遍历必须有, 前序或者后续遍历给定一个)。 激动不。
闲话少说, 直接上例子:
给定如下一棵二叉树的后序遍历和中序遍历两个序列如下:
In-Oder: 10, 30, 40, 50, 60, 70, 90
Post-Oder: 10, 40, 30, 60, 90, 70, 50
后序遍历和前序遍历的定义都知道。 我们有如下观察:
后序遍历: 左子树, 右子树, 根节点(某一任意节点)
中序遍历: 左子树, 根节点, 右子树
具体细节不说了。 所以在后序遍历序列的最后元素对应根节点。 该根节点在中序遍历中将中序遍历数组分成两部分, 左边的对应左子树, 右边的对应右子树。
重建步骤如下:
然后开始重建二叉树:
然后递归进行下去:
最后, 如下: