Trees / Beginner
Preorder Traversal Visualizer
The node first, then its left subtree, then its right subtree.
Start the Preorder Traversal simulation → Step forward and back, change the input, follow the code line by line in Java, Python, C++, C or JavaScript. Free, no sign-up.
Time and space complexity
| Best time | O(n) |
|---|---|
| Average time | O(n) |
| Worst time | O(n) |
| Extra space | O(h) |
Worked example, step by step
The same steps the simulator shows, on a small input.
- Preorder traversal: left subtree, right subtree and the node itself, in the order shown in the code.
- At node 50.
- Visit 50.
- Go left from 50.
- At node 30.
- Visit 30.
- Go left from 30.
- At node 20.
- Visit 20.
- Back at 30.
- Go right from 30.
- At node 40.
- Visit 40.
- Go left from 40.
- At node 35.
- Visit 35.
- Back at 40.
- Back at 30.
- Back at 50.
- Go right from 50.
- … 12 more steps …
- Visit 80.
- Back at 70.
- Back at 50.
- Done. Visit order: 50, 30, 20, 40, 35, 70, 60, 65, 80.
Preorder traversal in Java, Python, C++, C and JavaScript
void preorder(Node n) {
if (n == null) return;
visit(n);
preorder(n.left);
preorder(n.right);
}
def preorder(n):
if n is None:
return
visit(n)
preorder(n.left)
preorder(n.right)
void preorder(Node* n) {
if (!n) return;
visit(n);
preorder(n->left);
preorder(n->right);
}
void preorder(struct Node* n) {
if (n == NULL) return;
visit(n);
preorder(n->left);
preorder(n->right);
}
function preorder(n) {
if (n === null) return;
visit(n);
preorder(n.left);
preorder(n.right);
}In an interview
Preorder is used to copy or serialize a tree. Rebuilding a BST from its preorder gives the same shape.