From 7f413d62de2c2ee3c6462216a54da929316dbf55 Mon Sep 17 00:00:00 2001 From: prenastro Date: Wed, 8 Jul 2026 03:18:18 -0700 Subject: [PATCH] Completed s30 Trees-2 --- btfrominandpostordtrav.py | 34 ++++++++++++++++++++++++++++++++++ sumroottoleaf.py | 19 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 btfrominandpostordtrav.py create mode 100644 sumroottoleaf.py diff --git a/btfrominandpostordtrav.py b/btfrominandpostordtrav.py new file mode 100644 index 00000000..d7cb7bec --- /dev/null +++ b/btfrominandpostordtrav.py @@ -0,0 +1,34 @@ +class Solution: + def buildTree(self, inorder, postorder): + + inorder_map = {} + + for i, val in enumerate(inorder): + inorder_map[val] = i + + self.idx = len(postorder) - 1 + + def dfs(left, right): + if left > right: + return None + + # Root is at the end of postorder + root_val = postorder[self.idx] + self.idx -= 1 + + root = TreeNode(root_val) + + mid = inorder_map[root_val] + + # IMPORTANT: + # Build right subtree first + root.right = dfs(mid + 1, right) + + root.left = dfs(left, mid - 1) + + return root + + return dfs(0, len(inorder) - 1) + + # TC - O(n) + # SC - O(n) because of inorder Hashmap and recursion stack O(h) \ No newline at end of file diff --git a/sumroottoleaf.py b/sumroottoleaf.py new file mode 100644 index 00000000..9c630fc0 --- /dev/null +++ b/sumroottoleaf.py @@ -0,0 +1,19 @@ +class Solution: + def sumNumbers(self, root): + + def dfs(node, current_sum): + if not node: + return 0 + + current_sum = current_sum * 10 + node.val + + # leaf node + if not node.left and not node.right: + return current_sum + + return dfs(node.left, current_sum) + dfs(node.right, current_sum) + + return dfs(root, 0) + + # TC - O(n) + # SC - O(h) - recursion stack \ No newline at end of file