Tree Traversal


Tree traversal is a fundamental concept in computer science, where you visit all the nodes in a tree data structure. Tree traversal techniques are essential for various tasks such as searching, sorting, and evaluating expressions. In this blog, we will explore the different types of tree traversal methods—Preorder, Inorder, Postorder, and Level Order—and provide detailed code examples for each traversal.


What is Tree Traversal?

Tree traversal refers to the process of visiting all the nodes in a tree, exactly once, in a systematic way. The goal is to process or examine each node, and depending on the type of traversal, the order of node visits differs.

Types of Tree Traversal

There are several methods to traverse a tree. The most common tree traversal techniques are:

  1. Preorder Traversal
  2. Inorder Traversal
  3. Postorder Traversal
  4. Level Order Traversal

Each of these traversal methods serves different purposes and is implemented in various ways. Let's break down each method in detail.


1. Preorder Traversal

What is Preorder Traversal?

In preorder traversal, the order of visiting nodes is:

  • Visit the root node first.
  • Traverse the left subtree.
  • Traverse the right subtree.

This method is particularly useful for creating a copy of the tree or for prefix notation of expressions.

Preorder Traversal Algorithm

  1. Visit the root node.
  2. Recursively traverse the left subtree.
  3. Recursively traverse the right subtree.

Code Example: Preorder Traversal in Python

class Node:
    def __init__(self, key):
        self.left = None
        self.right = None
        self.value = key

def preorder_traversal(root):
    if root:
        print(root.value, end=" ")  # Visit the root
        preorder_traversal(root.left)  # Traverse left subtree
        preorder_traversal(root.right)  # Traverse right subtree

# Sample Tree Creation
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)

# Perform Preorder Traversal
print("Preorder Traversal:")
preorder_traversal(root)

Output:

Preorder Traversal:
1 2 4 5 3

2. Inorder Traversal

What is Inorder Traversal?

In inorder traversal, the order of visiting nodes is:

  • Traverse the left subtree.
  • Visit the root node.
  • Traverse the right subtree.

This traversal method is used primarily in binary search trees (BSTs) for sorting the elements. In an inorder traversal of a BST, the nodes are visited in ascending order.

Inorder Traversal Algorithm

  1. Recursively traverse the left subtree.
  2. Visit the root node.
  3. Recursively traverse the right subtree.

Code Example: Inorder Traversal in Python

def inorder_traversal(root):
    if root:
        inorder_traversal(root.left)  # Traverse left subtree
        print(root.value, end=" ")  # Visit the root
        inorder_traversal(root.right)  # Traverse right subtree

# Perform Inorder Traversal
print("\nInorder Traversal:")
inorder_traversal(root)

Output:

Inorder Traversal:
4 2 5 1 3

3. Postorder Traversal

What is Postorder Traversal?

In postorder traversal, the order of visiting nodes is:

  • Traverse the left subtree.
  • Traverse the right subtree.
  • Visit the root node.

Postorder traversal is useful for deleting nodes in a tree or evaluating postfix expressions.

Postorder Traversal Algorithm

  1. Recursively traverse the left subtree.
  2. Recursively traverse the right subtree.
  3. Visit the root node.

Code Example: Postorder Traversal in Python

def postorder_traversal(root):
    if root:
        postorder_traversal(root.left)  # Traverse left subtree
        postorder_traversal(root.right)  # Traverse right subtree
        print(root.value, end=" ")  # Visit the root

# Perform Postorder Traversal
print("\nPostorder Traversal:")
postorder_traversal(root)

Output:

Postorder Traversal:
4 5 2 3 1

4. Level Order Traversal

What is Level Order Traversal?

Level order traversal (also known as breadth-first traversal) involves visiting nodes level by level from the root, starting from the topmost level and working down. Each level is visited from left to right. This traversal can be efficiently implemented using a queue.

Level Order Traversal Algorithm

  1. Start from the root node.
  2. Visit all the nodes at the current level before moving to the next level.

Code Example: Level Order Traversal in Python

from collections import deque

def level_order_traversal(root):
    if not root:
        return
    queue = deque([root])
    
    while queue:
        node = queue.popleft()  # Dequeue a node
        print(node.value, end=" ")
        
        if node.left:
            queue.append(node.left)  # Enqueue left child
        if node.right:
            queue.append(node.right)  # Enqueue right child

# Perform Level Order Traversal
print("\nLevel Order Traversal:")
level_order_traversal(root)

Output:

Level Order Traversal:
1 2 3 4 5

Applications of Tree Traversal

  1. Expression Evaluation: Traversals like preorder, inorder, and postorder are used to evaluate mathematical expressions stored in trees, such as expression trees.

  2. Sorting: In binary search trees, inorder traversal gives a sorted sequence of the tree's elements.

  3. Searching: Traversing trees (like BSTs) helps in searching for specific elements or ranges of values.

  4. Hierarchical Data Processing: Tree traversal is essential for processing hierarchical data like file systems, organization charts, and XML/JSON documents.