Learnitweb

Traversal orders in a Binary Tree

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);
    }
}