INPUT:
#include<iostream> using namespace std; class node { public: int data;
node *L,*R;
};
class BST
{ public:
void create(node *root); void inorder(node *root); void preorder(node *root); void postorder(node *root);
void min(node *root); void max(node *root); void insert(node *root); node *search(node *root,int key); void
mirror(node *root); int height(node *root);
};
void BST::create(node *root)
node *ne,*temp; char ans; do {
ne=new node; cout<<"Enter Data for
NewNode:"<<endl; cin>>ne->data; ne>L=NULL; ne->R=NULL; temp=root; while(1)
if(ne->data<temp->data) //le sub tree
if(temp->L==NULL)
temp->L=ne; break; } else
temp=temp->L;
} } else // Right subtree
if(temp->R==NULL)
temp->R=ne; break;
} else
temp=temp->R;
}
cout<<"Do You Want To Add More:"<<endl; cin>>ans;
}while(ans=='y'||ans=='Y');
void BST::insert(node*root)
node*ne,*temp; ne=new node; cout<<"enterdatafornewnodetoinsert:"<<endl; cin>>ne->data; ne->L=NULL;
ne>R=NULL; temp=root;
while(1)
if(ne->data<temp->data)
if(temp->L==NULL)
temp->L=ne;
break; } else
temp=temp->L;
} } else
if(temp->R==NULL)
{ temp->R=ne;
break; } else
temp=temp->R;
void BST::inorder(node*root)
if(root!=NULL)
inorder(root->L); cout<<root>data<<endl; inorder(root->R);
}
void BST::preorder(node*root)
if(root!=NULL)
cout<<root->data<<endl; preorder(root->L); preorder(root-
>R);
void BST::postorder(node*root)
if(root!=NULL)
{ postorder(root->L); postorder(root>R); cout<<root->data<<endl;
void BST::min(node*root)
node*temp; temp=root; while(temp>L!=NULL)
temp=temp->L;
cout<<"Minimum="<<temp->data<<endl;
void BST::max(node*root)
node*temp; temp=root; while(temp>R!=NULL)
temp=temp->R;
cout<<"Maximum="<<temp->data<<endl;
node* BST::search(node*root,int key)
if(root==NULL||root->data==key)
return root;
}
if(root->data>key)
return search(root->L,key);
} else { return search(root->R,key);
void BST::mirror(node*root)
node*temp;
if(root!=NULL)
temp=root->L; root>L=root->R; root->R=temp; mirror(root->L);
mirror(root->R);
int BST::height(node*root)
{ int i,j,max=0; i=1,j=1; if(root!=NULL)
{ i=i+height(root->L); j=j+height(root-
>R);
if(i>j) max=i; else max=j;
} return(max);
}
int main() {
BST ob; node
*root,*t; int ch,key,i; while(1)
cout<<"1create"<<endl; cout<<"2inorder"<<endl; cout<<"3preorder"<<endl; cout<<"4postorder"<<endl;
cout<<"5insert"<<endl; cout<<"6min"<<endl; cout<<"7max"<<endl; cout<<"8search"<<endl;
cout<<"9mirrorimage"<<endl; cout<<"10search"<<endl; cout<<"enteryourchoice =
"<<endl; cin>>ch; switch(ch)
{
case 1:root=new node; cout<<"Enter
Data for Root Node:"<<endl; cin>>root-
>data; root->L=NULL; root>R=NULL; ob.create(root); break; case 2:ob.inorder(root);
break;
case 3:ob.preorder(root);
break;
case 4:ob.postorder(root); break; case 5:ob.insert(root); break; case 6:ob.min(root);
break; case 7:ob.max(root); break; case 8:
cout<<"\nEnter the Data to be Search in BST=:"; cin>>key; t=ob.search(root,key); if(t==NULL)
cout<<"\nKeyis Not Present in BST"<<endl;
else
cout<<"\nkeyisPresen nBST"<<endl;
} break; case 9:ob.mirror(root); ob.inorder(root); break; case 10:i=ob.height(root);
cout<<"height="<<i<<end
l; break;
} } return 0;
} output: enteryourchoice =
Enter Data for Root Node:
10
Enter Data for NewNode:
Do You Want To Add More:
Enter Data for NewNode:
15 Do You Want To Add More: y
Enter Data for NewNode:
Do You Want To Add More:
Enter Data for NewNode:
9
Do You Want To Add More:
Enter Data for NewNode:
12 Do You Want To Add More: y
Enter Data for NewNode:
18 Do You Want To Add More: n
1create
2inorder
3preorder
4postorder
5insert
6min
7max
8search 9mirrorimage 10search enteryourchoice =
10 12
15 18
1create
2inorder
3preorder
4postorder
5insert
6min
7max
8search 9mirrorimage 10search enteryourchoice =