📅  最后修改于: 2023-12-03 15:26:34.516000             🧑  作者: Mango
在二叉树的遍历中,前序遍历、中序遍历和后序遍历是最基本和最重要的三种遍历方式。给定任意两种遍历方式,都可以唯一确定一棵二叉树。本文将重点介绍如何根据中序遍历和后序遍历构建出原二叉树的前序遍历。
在构造原二叉树之前,我们先了解如何用中序遍历和后序遍历重建二叉树。
假设给定一个二叉树的中序遍历和后序遍历序列,如下所示:
中序遍历序列:[D B E A F C]
后序遍历序列:[D E B F C A]
重建出该二叉树如下所示:
A
/ \
/ \
B C
/ \ /
D E F
根据前面的构造二叉树方法,我们可以采用递归的方式取得二叉树的前序遍历序列。具体实现如下:
class Solution:
def buildTree(self, inorder: List[int], postorder: List[int]) -> TreeNode:
if not inorder:
return None
root_val = postorder[-1]
root = TreeNode(root_val)
root_index = inorder.index(root_val)
root.left = self.buildTree(inorder[:root_index], postorder[:root_index])
root.right = self.buildTree(inorder[root_index + 1:], postorder[root_index:-1])
return root
上述代码使用了python中的递归思想,具体实现如下:
该算法的时间复杂度为$O(nlogn)$,空间复杂度为$O(n)$。