Recursive version

void inorder(Node node, List result) {
  if (node == null) return;
  inorder(node.left, result);
  result.add(node.val);
  inorder(node.right, result);
}
Advertisement

Iterative with stack

Deque stack = new ArrayDeque<>();
Node cur = root;
while (cur != null || !stack.isEmpty()) {
  while (cur != null) {
    stack.push(cur);
    cur = cur.left;
  }
  cur = stack.pop();
  result.add(cur.val);
  cur = cur.right;
}
Advertisement

Property: BST sorted

In-order of BST = sorted values. Powers BST validation, kth smallest, iterator design.

Recursive version

void inorder(Node node, List result) {
  if (node == null) return;
  inorder(node.left, result);
  result.add(node.val);
  inorder(node.right, result);
}

Iterative with stack

Deque stack = new ArrayDeque<>();
Node cur = root;
while (cur != null || !stack.isEmpty()) {
  while (cur != null) {
    stack.push(cur);
    cur = cur.left;
  }
  cur = stack.pop();
  result.add(cur.val);
  cur = cur.right;
}

Property: BST sorted

In-order of BST = sorted values. Powers BST validation, kth smallest, iterator design.

Complexity

O(N) time, O(H) space where H = tree height. Balanced: O(log N). Skewed: O(N).