1. What is Tree Traversal?
Tree traversal means visiting every node in a tree exactly once in a specific order. Since a binary tree is non-linear and hierarchical, there are multiple ways to traverse it.
Traversals help to:
- Process nodes in a meaningful order
- Search, insert, and delete efficiently
- Convert trees to other data formats (e.g., arrays, expressions)
There are two primary traversal types:
- Depth-First Traversal (DFS): Traverse as deep as possible down one branch before backing up.
- Breadth-First Traversal (BFS): Visit nodes level by level.
2. Depth-First Traversals
A. Inorder Traversal (Left → Root → Right)
- Traverse left subtree
- Visit root
- Traverse right subtree
1 / \ 2 3 / \ 4 5
Inorder Output: 4 2 5 1 3
Java Code:
void inorder(TreeNode node) { if (node != null) { inorder(node.left); System.out.print(node.data + " "); inorder(node.right); } }
B. Preorder Traversal (Root → Left → Right)
- Visit root
- Traverse left subtree
- Traverse right subtree
Preorder Output: 1 2 4 5 3
Java Code:
void preorder(TreeNode node) { if (node != null) { System.out.print(node.data + " "); preorder(node.left); preorder(node.right); } }
C. Postorder Traversal (Left → Right → Root)
- Traverse left subtree
- Traverse right subtree
- Visit root
Postorder Output: 4 5 2 3 1
Java Code:
void postorder(TreeNode node) { if (node != null) { postorder(node.left); postorder(node.right); System.out.print(node.data + " "); } }
3. Breadth-First Traversal (Level Order)
Level-wise visiting of nodes (top-down, left to right)
Level Order Output: 1 2 3 4 5
Java Code using Queue:
void levelOrder(TreeNode root) { if (root == null) return; Queue<TreeNode> queue = new LinkedList<>(); queue.add(root); while (!queue.isEmpty()) { TreeNode current = queue.poll(); System.out.print(current.data + " "); if (current.left != null) queue.add(current.left); if (current.right != null) queue.add(current.right); } }