-th Smallest Element in BST

Utilize inorder traversal (DFS). Ideally using iteration.

stack = []
while True:
    while root:
        stack.append(root)
        root = root.left
    root = stack.pop()
    if not (k := k - 1):
        return root.val
    root = root.right