Kth Smallest Element in a BST – Solution & Complexity

Solution Walkthrough

1. Recognize the Pattern

The key pattern is: Iterative in-order traversal with an explicit stack, stopping at the k-th visit. Identify the state and invariant before coding.

2. Build the Algorithm

Advance one state transition at a time. Mark or update state before exploring dependent work.

3. Check Edge Cases

Test empty or minimal input, skewed shapes, duplicates where allowed, and impossible outcomes.

4. Solution and Complexity

Time: O(h + k). Space: O(h) for the stack.

All 5 languages below run and submit against the remote judge for this problem — Java/Go/Rust use the same real TreeNode structural-type support the judge added for the rest of the linked-list/tree track.

def kth_smallest(root: TreeNode, k: int) -> int:
    stack = []
    node = root
    count = 0

    while stack or node is not None:
        while node is not None:
            stack.append(node)
            node = node.left
        node = stack.pop()
        count += 1
        if count == k:
            return node.val
        node = node.right

    return -1

FAQ