Last Updated : 02 Aug, 2025
Binary Tree is a non-linear and hierarchical data structure where each node has at most two children referred to as the left child and the right child. The topmost node in a binary tree is called the root, and the bottom-most nodes are called leaves.
Introduction to Binary Tree Representation of Binary TreeEach node in a Binary Tree has three parts:
Syntax to declare a Node of Binary Tree in different languages:
C++
// Use any below method to implement Nodes of binary tree
// 1: Using struct
struct Node {
int data;
Node* left, * right;
Node(int key) {
data = key;
left = nullptr;
right = nullptr;
}
};
// 2: Using class
class Node {
public:
int data;
Node* left, * right;
Node(int key) {
data = key;
left = nullptr;
right = nullptr;
}
};
C
// Structure of each node of the tree.
struct Node {
int data;
struct Node* left;
struct Node* right;
};
// Note : Unlike other languages, C does not support
// Object Oriented Programming. So we need to write
// a separat method for create and instance of tree node
struct Node* newNode(int item) {
struct Node* temp =
(struct Node*)malloc(sizeof(struct Node));
temp->key = item;
temp->left = temp->right = NULL;
return temp;
}
Java
// Class containing left and right child
// of current node and key value
class Node {
int key;
Node left, right;
public Node(int item)
{
key = item;
left = right = null;
}
}
Python
# A Python class that represents
# an individual node in a Binary Tree
class Node:
def __init__(self, key):
self.left = None
self.right = None
self.val = key
C#
// Class containing left and right child
// of current node and key value
class Node {
int key;
Node left, right;
public Node(int item)
{
key = item;
left = right = null;
}
}
JavaScript
/* Class containing left and right child
of current node and data*/
class Node
{
constructor(item)
{
this.data = item;
this.left = this.right = null;
}
}
Example for Creating a Binary Tree
Here’s an example of creating a Binary Tree with four nodes (2, 3, 4, 5)
Creating a Binary Tree having three nodes C++
#include <iostream>
using namespace std;
struct Node{
int data;
Node *left, *right;
Node(int d){
data = d;
left = nullptr;
right = nullptr;
}
};
int main(){
// Initilize and allocate memory for tree nodes
Node* firstNode = new Node(2);
Node* secondNode = new Node(3);
Node* thirdNode = new Node(4);
Node* fourthNode = new Node(5);
// Connect binary tree nodes
firstNode->left = secondNode;
firstNode->right = thirdNode;
secondNode->left = fourthNode;
return 0;
}
C
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node *left;
struct Node *right;
};
struct Node* createNode(int d) {
struct Node* newNode =
(struct Node*)malloc(sizeof(struct Node));
newNode->data = d;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
int main() {
// Initialize and allocate memory for tree nodes
struct Node* firstNode = createNode(2);
struct Node* secondNode = createNode(3);
struct Node* thirdNode = createNode(4);
struct Node* fourthNode = createNode(5);
// Connect binary tree nodes
firstNode->left = secondNode;
firstNode->right = thirdNode;
secondNode->left = fourthNode;
return 0;
}
Java
class Node {
int data;
Node left, right;
Node(int d) {
data = d;
left = null;
right = null;
}
}
class GfG {
public static void main(String[] args) {
// Initialize and allocate memory for tree nodes
Node firstNode = new Node(2);
Node secondNode = new Node(3);
Node thirdNode = new Node(4);
Node fourthNode = new Node(5);
// Connect binary tree nodes
firstNode.left = secondNode;
firstNode.right = thirdNode;
secondNode.left = fourthNode;
}
}
Python
class Node:
def __init__(self, d):
self.data = d
self.left = None
self.right = None
# Initialize and allocate memory for tree nodes
firstNode = Node(2)
secondNode = Node(3)
thirdNode = Node(4)
fourthNode = Node(5)
# Connect binary tree nodes
firstNode.left = secondNode
firstNode.right = thirdNode
secondNode.left = fourthNode
C#
using System;
class Node {
public int data;
public Node left, right;
public Node(int d) {
this.data = d;
left = null;
right = null;
}
}
class GfG {
static void Main() {
// Initialize and allocate memory for tree nodes
Node firstNode = new Node(2);
Node secondNode = new Node(3);
Node thirdNode = new Node(4);
Node fourthNode = new Node(5);
// Connect binary tree nodes
firstNode.left = secondNode;
firstNode.right = thirdNode;
secondNode.left = fourthNode;
}
}
JavaScript
class Node {
constructor(d) {
this.data = d;
this.left = null;
this.right = null;
}
}
// Initialize and allocate memory for tree nodes
let firstNode = new Node(2);
let secondNode = new Node(3);
let thirdNode = new Node(4);
let fourthNode = new Node(5);
// Connect binary tree nodes
firstNode.left = secondNode;
firstNode.right = thirdNode;
secondNode.left = fourthNode;
In the above code, we have created four tree nodes firstNode, secondNode, thirdNode and fourthNode having values 2, 3, 4 and 5 respectively.
The diagram below shows all these terms in a binary tree.
Terminologies in Binary Tree in Data Structure Properties of Binary TreePlease refer Properties of Binary Tree for more details.
Operations On Binary TreeFollowing is a list of common operations that can be performed on a binary tree:
1. TraversalTraversal in Binary Tree involves visiting all the nodes of the binary tree. Tree Traversal algorithms can be classified broadly into two categories, DFS and BFS:
Depth-First Search (DFS) algorithms: DFS explores as far down a branch as possible before backtracking. It is implemented using recursion. The main traversal methods in DFS for binary trees are:
Breadth-First Search (BFS) algorithms: BFS explores all nodes at the present depth before moving on to nodes at the next depth level. It is typically implemented using a queue. BFS in a binary tree is commonly referred to as Level Order Traversal.
3. SearchSearching for a value in a binary tree means looking through the tree to find a node that has that value. Since binary trees do not have a specific order like binary search trees, we typically use any traversal method to search. Please refer Search a node in Binary Tree for details.
4. Insertion and DeletionWe must learn Level Order Traversal as a prerequisite for these operations. Please refer Insert in a Binary Tree and Delete from a Binary Tree for details.
Auxiliary Operations On Binary Tree Complexity Analysis of Binary Tree OperationsHere’s the complexity analysis for specific binary tree operations:
Operation Time Complexity Auxiliary Space In-Order Traversal O(n) O(n) Pre-Order Traversal O(n) O(n) Post-Order Traversal O(n) O(n) Searching (Unbalanced) O(n) O(n)Note: We can use Morris Traversal to traverse all the nodes of the binary tree in O(n) time complexity but with O(1) auxiliary space.
Advantages of Binary TreeTree is a hierarchical data structure. Main uses of trees include maintaining hierarchical data, providing moderate access and insert/delete operations. Binary trees are special cases of tree where every node has at most two children.
Related Articles:Introduction to Binary Trees
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4