From 870ed27f67da160b0470cd475414309f6e123ef4 Mon Sep 17 00:00:00 2001 From: Deven <63876261+devenperez@users.noreply.github.com> Date: Wed, 18 Jan 2023 22:30:31 -0500 Subject: [PATCH] Time: 117 ms (48.02%), Space: 14.6 MB (88.89%) - LeetHub --- ...-recover-a-tree-from-preorder-traversal.py | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 1028-recover-a-tree-from-preorder-traversal/1028-recover-a-tree-from-preorder-traversal.py diff --git a/1028-recover-a-tree-from-preorder-traversal/1028-recover-a-tree-from-preorder-traversal.py b/1028-recover-a-tree-from-preorder-traversal/1028-recover-a-tree-from-preorder-traversal.py new file mode 100644 index 0000000..39d22d5 --- /dev/null +++ b/1028-recover-a-tree-from-preorder-traversal/1028-recover-a-tree-from-preorder-traversal.py @@ -0,0 +1,51 @@ +# 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 recoverFromPreorder(self, traversal: str) -> Optional[TreeNode]: + # Gets next node in traversal (and removes it from the string) + # Returns (value, depth) + def getNextNode() -> tuple[int, int]: + nonlocal traversal + + # Find depth + depth = 0 + while traversal[0] == "-": + depth += 1 + traversal = traversal[1:] + + # Find value + value = 0 + while len(traversal) > 0 and traversal[0] != "-": + value = (value * 10) + int(traversal[0]) + traversal = traversal[1:] + + return (value, depth) + + # Base Case: empty tree + if len(traversal) == 0: + return None + + root = TreeNode(getNextNode()[0]) + currentRoute = [root] + + while len(traversal) > 0: + nodePair = getNextNode() + + # Go deeper + if nodePair[1] == len(currentRoute): + currentRoute[-1].left = TreeNode(nodePair[0]) + currentRoute.append(currentRoute[-1].left) + continue + + # Go back up the tree + while nodePair[1] < len(currentRoute): + currentRoute.pop() + + currentRoute[-1].right = TreeNode(nodePair[0]) + currentRoute.append(currentRoute[-1].right) + + return root \ No newline at end of file