← Tree Traversal

Micro-Drill #219 — Construct BT from preorder + inorder

Tree Traversal Target: 15s

Preorder[0] is root. Find root in inorder → left subtree is inorder[:mid], right is inorder[mid+1:].

def buildTree(preorder, inorder):
    if not preorder: return None
    root = TreeNode(preorder[0])
    mid = inorder.index(preorder[0])
    root.left = buildTree(preorder[1:mid+1], inorder[:mid])
    root.right = buildTree(preorder[mid+1:], inorder[mid+1:])
    return root

# Optimized: use hashmap for O(1) index lookup
def buildTree_opt(preorder, inorder):
    idx = {v: i for i, v in enumerate(inorder)}
    it = iter(preorder)
    def build(lo, hi):
        if lo > hi: return None
        val = next(it)
        node = TreeNode(val)
        mid = idx[val]
        node.left = build(lo, mid - 1)
        node.right = build(mid + 1, hi)
        return node
    return build(0, len(inorder) - 1)

Type it from memory. Go.

Practice Problems

Related Coding Drills

← Micro #218 Micro #220 →