题目:
给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。
数据范围:n ≤ 2000,节点的值 −10000≤ val ≤10000
思路:
1、前序遍历首个元素是根节点,中序遍历由根节点分隔左右节点,前序遍历的节点总数和中序遍历一样,节点值也一样;
2、根据输入的前序遍历得到根节点,然后在输入的中序遍历中找到左节点和右节点,即可得到树结构。
def reConstructBinaryTree(self, preOrder, vinOrder):
if (
0 <= len(preOrder) <= 2000
and max(preOrder) <= 10000
and min(preOrder) >= -10000
):
root_data = TreeNode(preOrder[0])
num = vinOrder.index(preOrder[0])
root_data.left = self.reConstructBinaryTree(
preOrder[1 : 1 + num], vinOrder[:num]
)
root_data.right = self.reConstructBinaryTree(
preOrder[num + 1 :], vinOrder[num + 1 :]
)
return root_data