示例
假设我们有以下前序遍历和中序遍历结果:
前序遍历(Preorder): [1, 2, 4, 5, 3, 6, 7]
中序遍历(Inorder): [4, 2, 5, 1, 6, 3, 7]
步骤
1. 确定根节点:
前序遍历的第一个元素是根节点,所以根节点是 1。
2. 划分左右子树:
在中序遍历中找到根节点 1 的位置,根节点左边的部分 [4, 2, 5] 是左子树,右边的部分 [6, 3, 7] 是右子树。
3. 递归处理左子树:
左子树的前序遍历部分是 [2, 4, 5],中序遍历部分是 [4, 2, 5]。
左子树的根节点是 2。
在中序遍历中找到 2 的位置,左边的部分 [4] 是左子树,右边的部分 [5] 是右子树。
递归处理:
左子树的前序遍历部分是 [4],中序遍历部分是 [4],根节点是 4。
右子树的前序遍历部分是 [5],中序遍历部分是 [5],根节点是 5。
4. 递归处理右子树:
右子树的前序遍历部分是 [3, 6, 7],中序遍历部分是 [6, 3, 7]。
右子树的根节点是 3。
在中序遍历中找到 3 的位置,左边的部分 [6] 是左子树,右边的部分 [7] 是右子树。
递归处理:
左子树的前序遍历部分是 [6],中序遍历部分是 [6],根节点是 6。
右子树的前序遍历部分是 [7],中序遍历部分是 [7],根节点是 7。
5. 合并结果:
左子树的后序遍历结果是 [4, 5, 2]。
右子树的后序遍历结果是 [6, 7, 3]。
合并结果得到整个树的后序遍历结果是 [4, 5, 2, 6, 7, 3, 1]。
总结
通过上述步骤,我们可以从前序遍历和中序遍历结果推导出后序遍历结果。同样地,可以通过中序遍历和后序遍历结果推导出前序遍历结果。需要注意的是,直接从前序遍历和后序遍历结果无法唯一确定中序遍历结果,因为前序遍历和后序遍历不能唯一确定二叉树的结构。