← Back to Leo Academy Masterclass

Problem #173: Binary Search Tree Iterator

Medium Binary Search Tree

Intuition & Strategy Breakdown

Use a stack to simulate controlled in-order traversal. Push node and all its left descendants onto stack; pop on next() and process right subtree.

Python Solution

class BSTIterator:
    def __init__(self, root: Optional[TreeNode]):
        self.stack = []
        self._push_left(root)

    def _push_left(self, node):
        while node:
            self.stack.append(node)
            node = node.left

    def next(self) -> int:
        node = self.stack.pop()
        if node.right:
            self._push_left(node.right)
        return node.val

    def hasNext(self) -> bool:
        return len(self.stack) > 0

Java Solution

class BSTIterator {
    private Stack stack;

    public BSTIterator(TreeNode root) {
        stack = new Stack<>();
        pushLeft(root);
    }

    private void pushLeft(TreeNode node) {
        while (node != null) {
            stack.push(node);
            node = node.left;
        }
    }

    public int next() {
        TreeNode node = stack.pop();
        if (node.right != null) {
            pushLeft(node.right);
        }
        return node.val;
    }

    public boolean hasNext() {
        return !stack.isEmpty();
    }
}
Watch Interactive Video on Leo Academy Main App