← Tree Traversal

Micro-Drill #220 — Morris inorder traversal (O(1) space)

Tree Traversal Target: 15s

O(1) space traversal using temporary threaded links. Each edge traversed at most twice → O(n) time.

def morrisInorder(root):
    res = []
    cur = root
    while cur:
        if not cur.left:
            res.append(cur.val)
            cur = cur.right
        else:
            # find inorder predecessor
            pred = cur.left
            while pred.right and pred.right != cur:
                pred = pred.right
            if not pred.right:
                pred.right = cur  # create thread
                cur = cur.left
            else:
                pred.right = None  # remove thread
                res.append(cur.val)
                cur = cur.right
    return res

Type it from memory. Go.

Practice Problems

Related Coding Drills

← Micro #219 Micro #221 →