Skip to main content

Command Palette

Search for a command to run...

Introduction to Binary Trees Operations and Traversal | Data Structures and Algorithms Day #12

Learn binary tree operations and traversal techniques with code examples in Python and JavaScript.

Updated
5 min read
Introduction to Binary Trees Operations and Traversal | Data Structures and Algorithms Day #12

Binary trees are a crucial data structure used in computer science to manage and access hierarchical data efficiently. From organizing databases to parsing expressions and enabling quick searches, binary trees provide the foundation for numerous algorithms and systems. In this article, we’ll cover essential binary tree operations and the different types of tree traversal techniques, complete with code examples in Python and JavaScript.


What Is a Binary Tree?

A binary tree is a hierarchical data structure where each node has at most two child nodes—referred to as the left and right children. This makes it an ideal structure for implementing decision-making algorithms, balanced search trees, and file storage systems.

Binary trees follow a parent-child relationship. The root node is the top-most node, and each node can have zero, one, or two child nodes. This structure enables efficient insertion, deletion, and search operations, following recursive logic.


Binary Tree Operations

The primary operations on binary trees include:

  1. Insertion – Adding elements to the tree.

  2. Search – Locating a specific element.

  3. Deletion – Removing an element from the tree.

  4. Traversal – Visiting nodes in a specific order (inorder, preorder, postorder).

Let’s look at these operations in detail with Python and JavaScript implementations.


Inserting a Node into a Binary Tree

When inserting a new node, we always start from the root and find the appropriate place to insert the element, ensuring it adheres to binary tree rules.

Python Code Example – Insertion

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

def insert(root, value):
    if root is None:
        return Node(value)
    if value < root.value:
        root.left = insert(root.left, value)
    else:
        root.right = insert(root.right, value)
    return root

# Example usage
root = Node(10)
insert(root, 5)
insert(root, 15)
print(root.left.value)  # Output: 5

JavaScript Code Example – Insertion

class Node {
    constructor(value) {
        this.value = value;
        this.left = null;
        this.right = null;
    }
}

function insert(root, value) {
    if (root === null) return new Node(value);
    if (value < root.value) root.left = insert(root.left, value);
    else root.right = insert(root.right, value);
    return root;
}

// Example usage
let root = new Node(10);
insert(root, 5);
insert(root, 15);
console.log(root.left.value); // Output: 5

Binary Tree Traversal Techniques

Traversal refers to the process of visiting each node in a tree exactly once. There are three main types of binary tree traversal:

1. Inorder Traversal

In inorder traversal, we visit the left subtree, the root, and then the right subtree. This traversal gives nodes in sorted order for binary search trees.

Inorder Traversal Order: Left -> Root -> Right

Python Code Example – Inorder Traversal

def inorder(root):
    if root:
        inorder(root.left)
        print(root.value, end=" ")
        inorder(root.right)

JavaScript Code Example – Inorder Traversal

function inorder(root) {
    if (root !== null) {
        inorder(root.left);
        console.log(root.value);
        inorder(root.right);
    }
}

2. Preorder Traversal

In preorder traversal, we visit the root first, followed by the left and right subtrees. This traversal is useful for creating a copy of the tree.

Preorder Traversal Order: Root -> Left -> Right

Python Code Example – Preorder Traversal

def preorder(root):
    if root:
        print(root.value, end=" ")
        preorder(root.left)
        preorder(root.right)

JavaScript Code Example – Preorder Traversal

function preorder(root) {
    if (root !== null) {
        console.log(root.value);
        preorder(root.left);
        preorder(root.right);
    }
}

3. Postorder Traversal

In postorder traversal, we visit the left and right subtrees first and the root node last. This traversal is useful for deleting the tree in a safe way.

Postorder Traversal Order: Left -> Right -> Root

Python Code Example – Postorder Traversal

def postorder(root):
    if root:
        postorder(root.left)
        postorder(root.right)
        print(root.value, end=" ")

JavaScript Code Example – Postorder Traversal

function postorder(root) {
    if (root !== null) {
        postorder(root.left);
        postorder(root.right);
        console.log(root.value);
    }
}

Time and Space Complexity of Binary Tree Operations

  • Insertion: O(log n) in a balanced tree; O(n) in the worst case (skewed tree).

  • Search: O(log n) in a balanced tree; O(n) in the worst case.

  • Deletion: O(log n) for balanced trees.

  • Traversal: O(n) for all traversal methods (inorder, preorder, postorder), where n is the number of nodes.


Real-World Applications of Binary Trees

  1. Expression Trees: Used in compilers to parse mathematical expressions.

  2. File Systems: Directory structures are often represented as binary trees.

  3. Routing Algorithms: Binary trees are used to route packets efficiently in computer networks.


FAQ

What are the different types of binary tree traversal?

The three main types are inorder, preorder, and postorder traversals, each visiting nodes in a specific order.

What is the time complexity of binary tree insertion?

In a balanced tree, the time complexity is O(log n). However, in the worst case (for a skewed tree), it can be O(n).

Why use a binary tree over other data structures?

Binary trees efficiently store and retrieve hierarchical data. They are especially useful in scenarios that require sorted data or recursive traversal, such as search trees and expression parsing.


Conclusion

Binary trees are an essential part of computer science, providing the basis for many complex data structures and algorithms. Understanding their operations—like insertion, search, and traversal—along with implementing these in Python and JavaScript will strengthen your knowledge of hierarchical data structures.


Data Structures and Algorithms

Part 12 of 26

In this series, I will walk you through Data Structures and Algorithms and help you prepare for coding interviews.

Up next

Introduction to Trees in Data Structures | Day #11

Learn the basics of tree data structures with code examples in Python and JavaScript