diff --git a/trees_and_graphs/construct_tree_inorder_preorder.py b/trees_and_graphs/construct_tree_inorder_preorder.py new file mode 100644 index 0000000..efb6d04 --- /dev/null +++ b/trees_and_graphs/construct_tree_inorder_preorder.py @@ -0,0 +1,21 @@ +def build_tree(preorder: list[int], inorder: list[int]) -> Optional[TreeNode]: + + def helper(i_left, i_right, index_map): + + if i_left > i_right: + return None + + root = TreeNode(preorder.pop(0)) + index_here = index_map[root.val] + + # this order change from postorder + root.left = helper(i_left, index_here - 1, index_map) + root.right = helper(index_here + 1, i_right, index_map) + + return root + + + index_map = {value: index for index, value in enumerate(inorder)} + + return helper(0, len(inorder) - 1, index_map) +