Concept Flow - Tree Traversal Preorder Root Left Right
Start at Root
Visit Node (Root)
Traverse Left Subtree
Traverse Right Subtree
End
Start at the root node, visit it, then recursively traverse the left subtree, followed by the right subtree.
void preorder(Node* root) {
if (root == NULL) return;
printf("%d ", root->data);
preorder(root->left);
preorder(root->right);
}| Step | Operation | Node Visited | Left/Right | Tree State |
|---|---|---|---|---|
| 1 | Visit root | 1 | Root | 1 / \ 2 3 |
| 2 | Traverse left subtree | 2 | Left | 1 / \ 2 3 |
| 3 | Visit node | 2 | Left | 1 / \ 2 3 |
| 4 | Traverse left subtree | 4 | Left of 2 | 1 / \ 2 3 / 4 |
| 5 | Visit node | 4 | Left of 2 | 1 / \ 2 3 / 4 |
| 6 | Traverse left subtree | NULL | Left of 4 | No change |
| 7 | Traverse right subtree | NULL | Right of 4 | No change |
| 8 | Traverse right subtree | 5 | Right of 2 | 1 / \ 2 3 / \ 4 5 |
| 9 | Visit node | 5 | Right of 2 | 1 / \ 2 3 / \ 4 5 |
| 10 | Traverse left subtree | NULL | Left of 5 | No change |
| 11 | Traverse right subtree | NULL | Right of 5 | No change |
| 12 | Traverse right subtree | 3 | Right | 1 / \ 2 3 / \ 4 5 |
| 13 | Visit node | 3 | Right | 1 / \ 2 3 / \ 4 5 |
| 14 | Traverse left subtree | NULL | Left of 3 | No change |
| 15 | Traverse right subtree | NULL | Right of 3 | No change |
| 16 | End | NULL | None | Traversal complete |
| Variable | Start | After Step 1 | After Step 3 | After Step 5 | After Step 9 | After Step 13 | Final |
|---|---|---|---|---|---|---|---|
| Current Node | 1 (root) | 1 | 2 | 4 | 5 | 3 | NULL |
| Visited Nodes | [] | [1] | [1,2] | [1,2,4] | [1,2,4,5] | [1,2,4,5,3] | [1,2,4,5,3] |
Preorder traversal visits nodes in this order: 1. Root node 2. Left subtree (preorder) 3. Right subtree (preorder) Use recursion: visit node, then left, then right. Stops when node is NULL. Print or process node when visited.
root?Node *root is correct.if(root == NULL) correctly checks for null pointer. Assignment = is wrong.
1
/ \
2 3
/ \
4 5
void preorder(Node *root) {
if(root == NULL) return;
preorder(root->left);
preorder(root->right);
printf("%d ", root->data);
}
void preorder(Node *root, int *arr, int *index) {
if(root == NULL) return;
// What goes here?
}
Pass the test and this pattern moves unknown