Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
29 views4 pages

P Ques6 Binary Search Tree

Uploaded by

Rushank Garg
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
29 views4 pages

P Ques6 Binary Search Tree

Uploaded by

Rushank Garg
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
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