Professional Documents
Culture Documents
Program 14
Program 14
THEORY: In binary search tree all the left subtree elements should be
less than root data and all the right subtree elements should be
smaller than data. This is called binary search tree property. Note
that this property should be satisfied at every node in the tree.
Since root data is always between left subtree data and right subtree
data performing inorder traversal on binary search tree produces a
sorted list. If we are searching for an element and if left subtree data
is less than the element we want to search then skip it. Same is the
case with right subtree. In other words the binary seach tree
considers either the left or right subtree to search an element but
not both.
ALGORITHM:
a. Insertion:
1. If root == NULL create new node and return the same.
2. If root->data>=d
i. root->left=Insertion(root->left,d)
3. else root->right=Insertion(root->right,d)
b. deletion:
1. If root==NULL return NULL
2. if d<root->data
i. call deletinbst(root->left,d)
ii. return root
3. else if (d==root->d)
-return NULL
-node* temp=root->right
- delete root
- return temp
-node* temp=root->right
- delete root
- return temp
root->data=rep->data;
root->right=deleteinbst(root->right,rep->data);
return root;
4. else
root->right=deleteinbst(root->right,d);
return root;
c. searching:
1.if(root is NULL)
return false;
2. if(root->data==key)
return true;
3.else if(key<=root->data)
return searchh(root->left,key);
d. traversal:
(inorder)
CODE:
#include<iostream>
/*5 3 7 1 6 8 -1*/
class node
public:
int data;
node* left;
node* right;
node(int d)
data=d;
left=right=NULL;
};
if(!root)
return;
printin(root->left);
cout<<root->data<<",";
printin(root->right);
if(!root)
if(root->data>=d)
root->left=insertbst(root->left,d);
else
root->right=insertbst(root->right,d);
node* build()
int d;
cin>>d;
node* root=NULL;
while(d!=-1)
root=insertbst(root,d);
cin>>d;
return root;
if(!root)
return false;
if(root->data==key)
return true;
if(key<=root->data)
return searchh(root->left,key);
return searchh(root->right,key);
if(!root)
return NULL;
if(d<root->data)
root->left=deleteinbst(root->left,d);
return root;
else if(root->data==d)
if(root->left==NULL&&root->right==NULL)
{
delete root;
return NULL;
if(root->left==NULL&&root->right!=NULL)
node* temp=root->right;
delete root;
return temp;
if(root->left!=NULL&&root->right==NULL)
node* temp=root->left;
delete root;
return temp;
node* rep=root->right;
while(rep->left!=NULL)
rep=rep->left;
}
root->data=rep->data;
root->right=deleteinbst(root->right,rep->data);
return root;
else
root->right=deleteinbst(root->right,d);
return root;
int main()
node* root=build();
printin(root);
int d;
cin>>d;
if(searchh(root,d))
{
cout<<"\npresent\n";
else{
cout<<"\nabsent\n";
cin>>d;
root=deleteinbst(root,d);
printin(root);
return 0;
OUTPUT:
DISCUSSION:
As we can clearly see from the output figure the inorder traversal
of a binary search tree is always sorted.
LEARNING:
a. insertion:
Insertion(root,d
ata)
no
yes
Root==NULL Root->data>=d
?yes
end
b. searching:
Search(root,data)
yes
Root==N Return false
ULL?
no
Key<=root-
>data
c. Traversal:
Inorder(root)
yes
Root==NULL? return
NO
Inorder(root
->left)
cout<<root->data
Inorder(root-
>right)