Data Structures(Binary Search Tree)
Binary Search Tree
In a binary tree, every node can have a maximum of two children but
there is no need to maintain the order of nodes basing on their values. In a
binary tree, the elements are arranged in the order they arrive at the tree
from top to bottom and left to right.
A binary tree has the following time complexities...
- Search
Operation - O(n)
- Insertion
Operation - O(1)
- Deletion
Operation - O(n)
To enhance the performance of binary tree, we use a special type of
binary tree known as Binary Search Tree. Binary search tree mainly
focuses on the search operation in a binary tree. Binary search tree can be
defined as follows...
Binary Search Tree is a binary tree
in which every node contains only smaller values in its left subtree and only
larger values in its right subtree.
In a binary search tree, all
the nodes in the left subtree of any node contains smaller values and all the
nodes in the right subtree of any node contains larger values as shown in the
following figure...
Example
The following tree is a Binary
Search Tree. In this tree, left subtree of every node contains nodes with
smaller values and right subtree of every node contains larger values.
Every
binary search tree is a binary tree but every binary tree need not to be binary
search tree.
Operations on a Binary Search Tree
The following operations are
performed on a binary search tree...
- Search
- Insertion
- Deletion
Search Operation in BST
In a binary search tree, the
search operation is performed with O(log
n) time complexity. The search operation is performed as
follows...
- Step 1 - Read the search
element from the user.
- Step 2 - Compare the
search element with the value of root node in the tree.
- Step 3 - If both are
matched, then display "Given node is found!!!" and terminate the
function
- Step 4 - If both are not
matched, then check whether search element is smaller or larger than that
node value.
- Step 5 - If search
element is smaller, then continue the search process in left subtree.
- Step 6- If search
element is larger, then continue the search process in right subtree.
- Step 7 - Repeat the same
until we find the exact element or until the search element is compared
with the leaf node
- Step 8 - If we reach to
the node having the value equal to the search value then display
"Element is found" and terminate the function.
- Step 9 - If we reach to
the leaf node and if it is also not matched with the search element, then
display "Element is not found" and terminate the function.
Insertion Operation in BST
In a binary search tree, the
insertion operation is performed with O(log n) time complexity. In binary
search tree, new node is always inserted as a leaf node. The insertion
operation is performed as follows...
- Step 1 - Create a newNode
with given value and set its left and right to NULL.
- Step 2 - Check whether
tree is Empty.
- Step 3 - If the tree
is Empty,
then set root to newNode.
- Step 4 - If the tree
is Not Empty,
then check whether the value of newNode is smaller or larger than
the node (here it is root node).
- Step 5 - If newNode
is smaller than or equal to
the node then move to its left child.
If newNode is larger than
the node then move to its right child.
- Step 6- Repeat the above
steps until we reach to the leaf node
(i.e., reaches to NULL).
- Step 7 - After reaching
the leaf node, insert the newNode as left child if the newNode
is smaller or
equal to that leaf node or else insert it as right child.
Deletion Operation in BST
In a binary search tree, the
deletion operation is performed with O(log n) time complexity. Deleting a
node from Binary search tree includes following three cases...
- Case 1: Deleting a
Leaf node (A node with no children)
- Case 2: Deleting a
node with one child
- Case 3: Deleting a
node with two children
Case 1: Deleting a
leaf node
We use the following steps to
delete a leaf node from BST...
- Step 1 - Find the node
to be deleted using search
operation
- Step 2 - Delete the node
using free function
(If it is a leaf) and terminate the function.
Case 2: Deleting a
node with one child
We use the following steps to
delete a node with one child from BST...
- Step 1 - Find the node
to be deleted using search
operation
- Step 2 - If it has only
one child then create a link between its parent node and child node.
- Step 3 - Delete the node
using free function
and terminate the function.
Case 3: Deleting a
node with two children
We use the following steps to
delete a node with two children from BST...
- Step 1 - Find the node
to be deleted using search
operation
- Step 2 - If it has two
children, then find the largest node
in its left
subtree (OR) the smallest node in its right subtree.
- Step 3 - Swap both deleting node and
node which is found in the above step.
- Step 4 - Then check
whether deleting node came to case
1 or case
2 or else goto step 2
- Step 5 - If it comes
to case 1,
then delete using case 1 logic.
- Step 6- If it comes
to case 2,
then delete using case 2 logic.
- Step 7 - Repeat the same
process until the node is deleted from the tree.
Example
Construct a Binary Search Tree
by inserting the following sequence of numbers...
10,12,5,4,20,8,7,15
and 13
Above elements are inserted
into a Binary Search Tree as follows...
Implementaion
of Binary Search Tree using C Programming Language
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *left;
struct node *right;
};
void inorder(struct node *root)
{
if(root)
{
inorder(root->left);
printf(" %d",root->data);
inorder(root->right);
}
}
int main()
{
int n , i;
struct node *p , *q , *root;
printf("Enter the number of nodes to be insert: ");
scanf("%d",&n);
printf("\nPlease enter the numbers to be insert: ");
for(i=0;i<i++)
{
p = (struct node*)malloc(sizeof(struct node));
scanf("%d",&p->data);
p->left = NULL;
p->right = NULL;
if(i == 0)
{
root = p; // root always point to the root node
}
else
{
q = root; // q is used to traverse the tree
while(1)
{
if(p->data > q->data)
{
if(q->right == NULL)
{
q->right = p;
break;
}
else
q = q->right;
}
else
{
if(q->left == NULL)
{
q->left = p;
break;
}
else
q = q->left;
}
}
}
}
printf("\nBinary Search Tree nodes in Inorder Traversal: ");
inorder(root);
printf("\n");
return 0;
}
Output
Comments
Post a Comment