# Binary Trees

A binary tree is a tree data structure in which each node can have at most two children, referred to as the left child and the right child. The left child is always less than or equal to the parent node in value, while the right child is always greater than the parent node in value. If a child is missing, it is represented as a null or empty node.

In a binary tree, the topmost node is called the root, and the nodes without any children are called leaf nodes or external nodes. The remaining nodes in the tree are called internal nodes, which have at least one child.

The above tree is a binary tree because each node contains the utmost two children. The logical representation of the above tree is given below:

## Properties of Binary Tree

Binary trees have several important properties, including:

1. Each node in a binary tree can have at most two children: left and right. This property makes binary trees different from other tree structures, such as ternary trees or quadtrees, which allow nodes to have more than two children.
2. The left subtree of a node contains only nodes with values less than or equal to the node’s value, while the right subtree contains only nodes with values greater than the node’s value. This property makes binary trees useful for searching, sorting, and other operations that require data to be organized in a specific order.
3. The height of a binary tree is the maximum number of edges from the root node to any leaf node. The height of a binary tree can range from O(log n) for a balanced tree to O(n) for a degenerate tree, where n is the number of nodes in the tree.
4. The number of nodes in a binary tree with height h is at most 2^(h+1) – 1, and at least 2^h. This property can be used to estimate the memory usage and performance of binary trees.
5. Binary trees can be traversed in different ways, such as pre-order, in-order, and post-order traversals, which determine the order in which the nodes are visited. These traversals can be used to perform various operations on binary trees, such as searching for a node, printing the tree elements in a specific order, or evaluating arithmetic expressions represented by a tree.
6. Binary trees can be balanced or unbalanced, depending on the distribution of nodes in the tree. Balanced binary trees, such as AVL trees and Red-Black trees, maintain the height balance property, which ensures that the height of the tree is O(log n) and operations can be performed in O(log n) time. Unbalanced binary trees, on the other hand, can have a height of O(n) and operations can take O(n) time in the worst case.

## Types of Binary Tree

There are several types of binary trees, some of which are listed below:

### Full Binary Tree

A binary tree is called a full binary tree if every node has either 0 or 2 children. In other words, every non-leaf node has exactly two children. Here’s an example of a full binary tree:

``````        1
/ \
2   3
/ \ / \
4  5 6  7``````

### Complete Binary Tree

A binary tree is called a complete binary tree if all the levels are completely filled, except possibly the last level, which is filled from left to right. Here’s an example of a complete binary tree:

``````        1
/ \
2   3
/ \  /
4  5 6``````

### Perfect Binary Tree

A binary tree is called a perfect binary tree if all the internal nodes have two children, and all the leaf nodes are at the same level. In other words, it’s a full binary tree where all the leaf nodes are at the same depth. Here’s an example of a perfect binary tree:

``````         1
/   \
2     3
/ \   / \
4   5 6   7``````

### Balanced Binary Tree

A binary tree is called a balanced binary tree if the height of the left and right subtrees of every node differ by at most one. Balancing a binary tree ensures that the height of the tree is O(log n), where n is the number of nodes in the tree, and operations can be performed in O(log n) time. Examples of balanced binary trees include AVL trees and Red-Black trees.

### Degenerate Binary Tree

A binary tree is called a degenerate binary tree if each internal node has only one child. A degenerate binary tree is essentially a linked list with each node having a single child. Here’s an example of a degenerate binary tree:

``````        1
\
2
\
3
\
4``````

These are some of the common types of binary trees, and each has its own properties and characteristics.

## Types of Operation perform on Binary Trees

There are several operations that can be performed on binary trees, including:

1. Insertion: The process of adding a new node to the binary tree. The new node is typically inserted as a leaf node in such a way that the binary tree properties are maintained.
2. Deletion: The process of removing a node from the binary tree. Deleting a node may require reorganizing the tree to ensure that the binary tree properties are maintained.
3. Traversal: The process of visiting all the nodes of the binary tree in a specific order. There are three main types of binary tree traversals: pre-order, in-order, and post-order.
4. Search: The process of finding a specific node in the binary tree. A common approach to searching a binary tree is to use the binary search algorithm, which takes advantage of the fact that the binary tree is sorted in a specific order.
5. Height: The height of a binary tree is the length of the longest path from the root node to a leaf node. The height of a binary tree can be used to estimate the memory usage and performance of the tree.
6. Balancedness: A binary tree is considered balanced if the left and right subtrees of every node differ in height by at most one. Balancing a binary tree can improve its performance and ensure that operations can be performed in O(log n) time.
7. Serialization and Deserialization: Serialization is the process of converting a binary tree into a string or array format that can be easily stored or transmitted. Deserialization is the process of reconstructing the binary tree from the serialized string or array. These operations are commonly used in data storage, transmission, and backup systems.

These are some of the common operations that can be performed on binary trees, and they are used in a variety of applications, such as data structures, algorithms, and computer science research.

We hope this article helped you to understand Binary Trees in a very detailed way.

Online Web Tutor invites you to try Skillshike! Learn CakePHP, Laravel, CodeIgniter, Node Js, MySQL, Authentication, RESTful Web Services, etc into a depth level. Master the Coding Skills to Become an Expert in PHP Web Development. So, Search your favourite course and enroll now.