Level order traversal (binary tree)
Level order visits every node at depth d before any node at depth d+1. It is exactly BFS on the tree graph: use a queue of node pointers, dequeue the front, print it, enqueue non-null children.
On this page
- Idea — queue of
Node* - Algorithm
- Example in C
- Complexity
1) Algorithm
| Step | Action |
|---|---|
| 1 | If root is NULL, return. |
| 2 | Enqueue root. |
| 3 | While queue not empty: dequeue u, visit u, enqueue u->left if present, enqueue u->right if present. |
2) Example in C
Simple queue-based level order traversal for the tree shown in comments.
#include <stdio.h>
#include <stdlib.h>
// Tree node
struct Node {
int data;
struct Node* left;
struct Node* right;
};
// Create new node
struct Node* createNode(int data) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->left = newNode->right = NULL;
return newNode;
}
// Simple queue
struct Queue {
struct Node* arr[100];
int front, rear;
};
// Initialize queue
void initQueue(struct Queue* q) {
q->front = 0;
q->rear = -1;
}
// Check empty
int isEmpty(struct Queue* q) {
return q->front > q->rear;
}
// Enqueue
void enqueue(struct Queue* q, struct Node* node) {
q->rear++;
q->arr[q->rear] = node;
}
// Dequeue
struct Node* dequeue(struct Queue* q) {
return q->arr[q->front++];
}
// Level Order Traversal
void levelOrder(struct Node* root) {
if (root == NULL) return;
struct Queue q;
initQueue(&q);
enqueue(&q, root);
while (!isEmpty(&q)) {
struct Node* temp = dequeue(&q);
printf("%d ", temp->data);
if (temp->left != NULL)
enqueue(&q, temp->left);
if (temp->right != NULL)
enqueue(&q, temp->right);
}
}
// Main function
int main() {
/*
1
/ \
2 3
/ \ /
4 5 6
*/
struct Node* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
root->right->left = createNode(6);
printf("Level Order Traversal: ");
levelOrder(root);
return 0;
}
Step-by-step execution table
| Step | Queue (Front -> Rear) | Node Dequeued | Output | Nodes Enqueued |
|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 2, 3 |
| 2 | 2, 3 | 2 | 1 2 | 4, 5 |
| 3 | 2, 3, 4, 5 -> after dequeue -> 3, 4, 5 | 3 | 1 2 3 | 6 |
| 4 | 4, 5, 6 | 4 | 1 2 3 4 | - |
| 5 | 5, 6 | 5 | 1 2 3 4 5 | - |
| 6 | 6 | 6 | 1 2 3 4 5 6 | - |
| 7 | Empty | - | Final Output | - |
How to read this
- Queue column shows current elements waiting to be processed.
- Dequeued node is the one being printed.
- Enqueued nodes are its children added to queue.
- Traversal goes level by level (left to right).
Final output
1 2 3 4 5 6
3) Complexity
- Time: each node enqueued and dequeued once → O(n) for
nnodes. - Extra space: queue holds at most one full level → O(w) width, worst O(n) for a complete last level.
Key takeaway
Level order is BFS; the queue stores the current frontier of tree nodes. Same pattern as graph BFS, but children are only left/right.
Next up: BFS using queue · Shortest path (unweighted) · All queue topics