from structures import build_tree

def kth_smallest_bst(root, k):
    if k <= 0:
        raise ValueError('k must be positive')
    stack, node = [], root
    while node is not None or stack:
        while node is not None:
            stack.append(node)
            node = node.left
        node = stack.pop()
        k -= 1
        if k == 0:
            return node.val
        node = node.right
    raise ValueError('rank exceeds tree size')
