题目
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
示例
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
思路
递归,注意两个节点参数和一个边界条件,有时间写推理过程
代码
size = len(preorder)
def recur(root,left,right):
if left > right:return
node = TreeNode(preorder[root])
i = dict[preorder[root]]
node.left = recur(root+1,left, i-1)
node.right =recur(i-left+root+1,i+1,right)
return node
dict = {}
preorder = preorder
for i in range(size):
dict[inorder[i]] = i
return recur(0,0,size-1)