Recursive
void preorder(Node node, List result) {
if (node == null) return;
result.add(node.val);
preorder(node.left, result);
preorder(node.right, result);
} Advertisement
Iterative with stack
Deque stack = new ArrayDeque<>();
stack.push(root);
while (!stack.isEmpty()) {
Node n = stack.pop();
result.add(n.val);
if (n.right != null) stack.push(n.right);
if (n.left != null) stack.push(n.left);
} Advertisement
Serialization use case
void serialize(Node node, StringBuilder sb) {
if (node == null) { sb.append("# "); return; }
sb.append(node.val).append(' ');
serialize(node.left, sb);
serialize(node.right, sb);
}Complexity
O(N) time. O(H) space for stack/recursion.
Recursive
void preorder(Node node, List result) {
if (node == null) return;
result.add(node.val);
preorder(node.left, result);
preorder(node.right, result);
} Iterative with stack
Deque stack = new ArrayDeque<>();
stack.push(root);
while (!stack.isEmpty()) {
Node n = stack.pop();
result.add(n.val);
if (n.right != null) stack.push(n.right);
if (n.left != null) stack.push(n.left);
} Serialization use case
void serialize(Node node, StringBuilder sb) {
if (node == null) { sb.append("# "); return; }
sb.append(node.val).append(' ');
serialize(node.left, sb);
serialize(node.right, sb);
}Complexity
O(N) time. O(H) space for stack/recursion.