def inorder_traverse_iter(root):
    """In-order traversal (iterative)."""
    stack = []
    values = []
    current = root

    while True:
        if current:
            stack.append(current)
            current = current.left
        elif stack:
            current = stack.pop()
            values.append(current.val)
            current = current.right
        else:
            break

    return values