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.

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:
Insertion – Adding elements to the tree.
Search – Locating a specific element.
Deletion – Removing an element from the tree.
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
Expression Trees: Used in compilers to parse mathematical expressions.
File Systems: Directory structures are often represented as binary trees.
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.




