0% found this document useful (0 votes)
6 views

P Ques6 Binary Search Tree

Uploaded by

Rushank Garg
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views

P Ques6 Binary Search Tree

Uploaded by

Rushank Garg
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

#include <iostream>

using namespace std;


template <class T>
class node
{
private:
node<T> *left;
T value;
node<T> *right;
public:
node(T x=0,node<T> *l=0,node<T> *r=0)
{
value=x;
left=l;
right=r;
}
template <class X> friend class binary_search_tree;
};
template <class T>
class binary_search_tree
{
private:
node<T> *root;
void insert_node(T x,node<T> *p)
{
if (root==0)
{
root=new node<T>(x);
}
else if (x>p->value)
{
if (p->right==0)
{
p->right=new node<T>(x);
}
else
{
insert_node(x,p->right);
}
}
else
{
if (p->left==0)
{
p->left=new node<T>(x);
}
else
{
insert_node(x,p->left);
}
}
}
void Preorder(node<T>* p)
{
if (p!=0)
{
cout << p->value << endl;
if(p->left != 0)
{
Preorder(p->left);
}
if(p->right != 0)
{
Preorder(p->right);
}
}
}
void Inorder(node<T>* p)
{
if (p!=0)
{
if(p->left != 0)
{
Inorder(p->left);
}
cout << p->value << endl;
if(p->right != 0)
{
Inorder(p->right);
}
}

}
void Postorder(node<T>* p)
{
if (p!=0)
{
if(p->left != 0)
{
Postorder(p->left);
}
if(p->right != 0)
{
Postorder(p->right);
}
cout << p->value << endl;
}
}
node<T>* min_node(node<T>* p)
{
node<T>* min = p;
while (min && min->left!=0)
{
min=min->left;
}
return min;
}
node<T>* deleteNode(node<T>* p, T x)
{
if (p == 0)
{
return 0;
}
if (x < p->value)
{
p->left = deleteNode(p->left,x);
}
else if (x > p->value)
{
p->right = deleteNode(p->right,x);
}
else
{
if (p->left == 0)
{
return p->right;
}
else if (p->right == 0)
{
return p->left;
}
node<T>* temp = min_node(p->right);
p->value = temp->value;
p->right = deleteNode(p->right, temp->value);
}
}
bool search_element(T x,node<T>* p)
{
if (p==0)
{
return false;
}
else if (p->value==x)
{
return true;
}
else if(x>p->value)
{
return search_element(x,p->right);
}
else
{
return search_element(x,p->left);
}
}
public:
binary_search_tree()
{
root=0;
}
void insert(T x)
{
insert_node(x,root);
}
node<T>* delete_node(T x)
{
deleteNode(root, x);
}
bool search(T x)
{
search_element(x,root);
}
void preorder()
{
Preorder(root);
}
void inorder()
{
Inorder(root);
}
void postorder()
{
Postorder(root);
}
};
int main()
{
binary_search_tree<int> obj;
int ch;
while (ch!=7)
{
cout<<"Which operation you want to perform :"<<endl;
cout<<"1. Insert an element x "<<endl;
cout<<"2. Delete an element x "<<endl;
cout<<"3. Search for an element x "<<endl;
cout<<"4. Preorder Display of BST"<<endl;
cout<<"5. Inorder Display of BST"<<endl;
cout<<"6. Postorder Display of BST"<<endl;
cout<<"7. Exit"<<endl;
cout<<"Enter Choice : ";
cin>>ch;

switch(ch)
{
int ele;
case(1):
{
cout<<"Enter the element you want to add : ";
cin>>ele;
obj.insert(ele);
break;
}
case(2):
{
cout<<"Enter the element you want to delete : ";
cin>>ele;
obj.delete_node(ele);
break;
}
case(3):
{
cout<<"Enter the element you want to search : ";
cin>>ele;
if (obj.search(ele))
{
cout<<"Element found"<<endl;
}
else
{
cout<<"Element not found"<<endl;
}
break;
}
case(4):
{
cout<<"Preorder display of Given BST :"<<endl;
obj.preorder();
break;
}
case(5):
{
cout<<"Inorder display of Given BST :"<<endl;
obj.inorder();
break;
}
case(6):
{
cout<<"Postorder display of Given BST :"<<endl;
obj.postorder();
break;
}
case(7):
{
cout<<"Exited"<<endl;
break;
}
default:
{
cout<<"Wrong Input"<<endl;
}
}
}
return 0;
}

You might also like