Construct Binary Tree from Preorder and Inorder Traversal

Problem page:https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal

Solution

class Solution:
    def __init__(self):
        self.p = 0
        self.i = 0
    def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNode]:
        def helper(stop):
            if self.i < len(inorder) and inorder[self.i] != stop:
                root = TreeNode(preorder[self.p])
                self.p += 1
                root.left = helper(root.val)
                self.i += 1
                root.right = helper(stop)
                return root
            return None
        return helper(None)

Complexity

  • time: O(n)
  • space: O(n)