Pre-order Tree Traversal — Root First Visualized
Learn pre-order traversal — visit root before left and right subtrees, step-by-step visualizer, recursive code, and use cases.
Introduction
Pre-order traversal visits nodes in Root → Left → Right order. Also called NLR (Node, Left, Right).
Used to copy trees, serialize structure, and evaluate prefix expressions.
Quick index
1. Traversal order
For tree [4, 2, 6, 1, 3, 5, 7]:
Pre-order: 4 → 2 → 1 → 3 → 6 → 5 → 7
Visit root first, then entire left subtree, then entire right subtree.
2. Interactive visualizer
Pre-order Traversal — Root → Left → Right
Visit root before subtrees — used to copy trees and prefix expression parsing.
Pre-order: Root → Left → Right.
Pre-order traversal
| function preOrder(node) { | |
| if (!node) return | |
| visit(node) | root first |
| preOrder(node.left) | |
| preOrder(node.right) | |
| } |
Root → Left → Right
Order
NLR
Uses
Copy
Time
O(n)
3. Full implementation
function preOrder(node, result = []) {
if (!node) return result
result.push(node.value) // visit root FIRST
preOrder(node.left, result)
preOrder(node.right, result)
return result
}
function preOrderIterative(root) {
if (!root) return []
const stack = [root],
result = []
while (stack.length) {
const node = stack.pop()
result.push(node.value)
if (node.right) stack.push(node.right)
if (node.left) stack.push(node.left)
}
return result
}Function calls with output
// ── Demo calls — output shown on the right ──
// tree: 4
// / \
// 2 6 ...
preOrder(root) // → [4, 2, 1, 3, 6, 5, 7]
preOrderIterative(root) // → [4, 2, 1, 3, 6, 5, 7]
preOrder(null) // → []4. When to use
| Use case | Why pre-order |
|---|---|
| Copy/clone tree | Create parent before children |
| Prefix expressions | Operator before operands |
| File system walk | Print directory before contents |
| Serialize tree | Parent-first preserves structure |
Summary
Pre-order = root before subtrees — O(n) time, O(h) recursion stack.
Next reads: In-order Traversal · Post-order Traversal
Subscribe to my newsletter
Stay up to date and get notified when I share new contents.
No spam ever, unsubscribe anytime