题目
- 根据前序遍历和中序遍历重建二叉树
- 根据中序遍历和后序遍历重建二叉树
Python题解
1.
def build_tree(preorder, inorder):
map = {}
for idx, item in enumerate(inorder):
map[item] = idx
return helper(preorder, 0, len(preorder),
inorder, 0, len(inorder), map)
def helper(preorder, preL, preR, inorder, inL, inR, map):
if preL > preR or inL > inR:
return None
root = TreeNode(preorder[preL])
root_idx = map.get(root.val)
root.left = helper(preorder, preL, preL + root_idx - inL,
inorder, inL, root_idx - 1, map)
root.right = helper(preorder, preL + root_idx - inL + 1, preR,
inorder, root_idx + 1, inR, map)
return root
2.
def build_tree(preorder, inorder):
map = {}
for idx, item in enumerate(inorder):
map[item] = idx
return helper(preorder, 0, len(preorder),
inorder, 0, len(inorder), map)
def helper(preorder, preL, preR, inorder, inL, inR, map):
if preL > preR or inL > inR:
return None
root = TreeNode(preorder[preL])
root_idx = map.get(root.val)
root.left = helper(preorder, preL, preL + root_idx - inL,
inorder, inL, root_idx - 1, map)
root.right = helper(preorder, preL + root_idx - inL + 1, preR,
inorder, root_idx + 1, inR, map)
return root