Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
For example, given
preorder = [3,9,20,15,7] inorder = [9,3,15,20,7]
Return the following binary tree:
3 / 9 20 / 15 7
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode: if not preorder or not inorder: return my_dict = {} for i, node in enumerate(inorder): my_dict[node] = i return self.helper(0, preorder, 0, len(inorder) - 1, inorder, my_dict) def helper(self, pre_left, preorder, in_left, in_right, inorder, my_dict): if in_right < in_left: return None cur_val = preorder[pre_left] cur = TreeNode(cur_val) left_size = my_dict[cur_val] - in_left in_index = my_dict[cur_val] cur.left = self.helper(pre_left + 1, preorder, in_left, in_left + left_size - 1, inorder, my_dict) # For pre_left, need to add 1 in additional to left_size cur.right = self.helper(pre_left + left_size + 1, preorder, in_left + left_size + 1, in_right, inorder, my_dict) return cur