diff --git a/leetcode_106.py b/leetcode_106.py new file mode 100644 index 00000000..5ebdcec7 --- /dev/null +++ b/leetcode_106.py @@ -0,0 +1,20 @@ +class Solution: + def buildTree(self, inorder: List[int], postorder: List[int]) -> Optional[TreeNode]: + idx = {val: i for i, val in enumerate(inorder)} + self.post_idx = len(postorder) - 1 + + def helper(left, right): + if left > right: + return None + + root_val = postorder[self.post_idx] + self.post_idx -= 1 + root = TreeNode(root_val) + + mid = idx[root_val] + + # build right subtree first + root.right = helper(mid + 1, right) + root.left = helper(left, mid - 1) + + return root \ No newline at end of file diff --git a/leetcode_129.py b/leetcode_129.py new file mode 100644 index 00000000..54497c31 --- /dev/null +++ b/leetcode_129.py @@ -0,0 +1,14 @@ +class Solution: + def sumNumbers(self, root: Optional[TreeNode]) -> int: + def dfs(node, curr): + if not node: + return 0 + + curr = curr * 10 + node.val + + if not node.left and not node.right: + return curr + + return dfs(node.left, curr) + dfs(node.right, curr) + + return dfs(root, 0) \ No newline at end of file