diff --git a/post-in.py b/post-in.py new file mode 100644 index 00000000..e743c2ed --- /dev/null +++ b/post-in.py @@ -0,0 +1,31 @@ +# O(n) time and space +# same as pre order in order but reverse pointer and right and left calls +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right +class Solution: + def buildTree(self, inorder: List[int], postorder: List[int]) -> Optional[TreeNode]: + self.idx = len(postorder)-1 + # Create an empty dictionary + inorder_map = {} + + # Use a standard loop with enumerate to fill it: { val: i } + for i, val in enumerate(inorder): + inorder_map[val] = i + return self.helper(postorder, 0, len(inorder) - 1, inorder_map) + + def helper(self, postorder, start, end, inorder_map): + if start > end: + return None + # move preorder index by 1 each time + rootVal = postorder[self.idx] + self.idx-=1 + root = TreeNode(rootVal) + rootIdx = inorder_map[rootVal] + root.right = self.helper(postorder, rootIdx+1,end,inorder_map) + root.left = self.helper(postorder,start,rootIdx-1,inorder_map) + + return root \ No newline at end of file diff --git a/root-leaf.py b/root-leaf.py new file mode 100644 index 00000000..a57c2cb6 --- /dev/null +++ b/root-leaf.py @@ -0,0 +1,25 @@ +# O(n) time - we visit every node +# O(h) space - recursion stack is height of tree +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right +class Solution: + #def __init__(self): + def sumNumbers(self, root: Optional[TreeNode]) -> int: + self.result=0 + self.helper(root,0) + return self.result + + def helper(self,root, curr): + if root == None: + return + + curr = curr*10+root.val + if root.left is None and root.right is None: + self.result+=curr + + self.helper(root.left,curr) + self.helper(root.right,curr) \ No newline at end of file