Advertisement
Eternoseeker

BST code DSA

Dec 5th, 2022 (edited)
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.50 KB | Source Code | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct node{
  5.   int data;
  6.   node *left;
  7.   node *right;
  8. };
  9.  
  10. class BST{
  11.     public:
  12.     node *root;
  13.     node *t;
  14.     BST(){
  15.         t = NULL;
  16.         root = NULL;
  17.     }
  18.  
  19.     node* getroot(){
  20.         return this->root;
  21.     }
  22.  
  23.     void insert(int key){
  24.         node* nn = new node;
  25.         nn -> data = key;
  26.         nn -> left = NULL;
  27.         nn -> right = NULL;
  28.         if(root == NULL){
  29.             root = nn;
  30.         }
  31.         else{
  32.             node* t = root;
  33.             node* p = NULL;
  34.             while(t != NULL){
  35.                 p = t;
  36.                 if(t -> data < nn -> data){
  37.                     t = t -> right;
  38.                 }
  39.                 else if(t -> data > nn -> data){
  40.                     t = t -> left;
  41.                 }
  42.             }
  43.             if(p -> data < nn -> data){
  44.                 p -> right = nn;
  45.             }
  46.             else{
  47.                 p -> left = nn;
  48.             }
  49.         }
  50.     }
  51.  
  52.     void inorder(struct node* temp){
  53.         if (!temp)
  54.             return;
  55.         inorder(temp -> left);
  56.         cout << temp -> data << " ";
  57.         inorder(temp -> right);
  58.     }
  59.  
  60.     void preorder(struct node* temp){
  61.             if (!temp)
  62.                 return;
  63.             cout << temp -> data << " ";
  64.             preorder(temp -> left);
  65.             preorder(temp -> right);
  66.     }
  67.  
  68.     void postorder(struct node* temp){
  69.             if (!temp){
  70.                 return;
  71.             }
  72.             postorder(temp -> left);
  73.             postorder(temp -> right);
  74.             cout << temp -> data << " ";
  75.     }
  76.  
  77.     void del(int key){
  78.         node* p = NULL;
  79.         node* t = root;
  80.  
  81.         while(t!=NULL && t->data != key){
  82.             p = t;
  83.             if(key<t->data)
  84.                 t = t->left;
  85.             else if(key> t->data)
  86.                 t = t->right;
  87.         }
  88.         if(t==NULL){
  89.             cout<<"Data Not found"<<endl;
  90.             return;
  91.         }
  92.  
  93.         if(t->left == NULL && t->right == NULL ){
  94.             if(p!=NULL){
  95.                 if(p->left == t)
  96.                     p->left = NULL;
  97.                 else if(p->right == t)
  98.                     p->right = NULL;
  99.             }
  100.             else{
  101.                 root = NULL;
  102.             }
  103.         }
  104.         else if(t->left == NULL && t->right != NULL ){
  105.             if(p!=NULL){
  106.                     if(p->left == t)
  107.                         p->left = t->right;
  108.                     else if(p->right == t)
  109.                         p->right = t->right;
  110.             }
  111.             else{
  112.                 root = t->right;
  113.             }
  114.         }
  115.         else if(t->left != NULL && t->right == NULL ){
  116.             if(p!=NULL){
  117.                 if(p->left == t)
  118.                     p->left = t->left;
  119.                 else if(p->right == t)
  120.                     p->right = t->left;
  121.             }
  122.             else{
  123.                 root = t->left;
  124.             }
  125.         }
  126.         else if(t->left != NULL && t->right != NULL ){
  127.             node* inSuc = t->right;
  128.             while(inSuc->left !=NULL)
  129.                 inSuc = inSuc->left;
  130.             int val = inSuc->data;
  131.             del(inSuc->data);
  132.  
  133.             t->data = val;
  134.         }
  135.     }
  136.     /* void del(int key){
  137.         node *parent = NULL;
  138.         node *t = root;
  139.         while(t != NULL && t -> data != key){
  140.             if(key < t -> data){
  141.                 parent = t;
  142.                 t = t -> left;
  143.             }
  144.             else if(key > t -> data){
  145.                 t = t -> right;
  146.             }
  147.         }
  148.         if(t == NULL){
  149.             cout << "Data not there" << endl;
  150.         }
  151.  
  152.         else if(t -> left == NULL && t -> right == NULL){
  153.             if(parent != NULL){
  154.                 if(parent -> left == t){
  155.                     parent -> left = NULL;
  156.                 }
  157.                 else if(parent -> right == t){
  158.                     parent -> right = NULL;
  159.                 }
  160.             }
  161.         }
  162.  
  163.         else if(t -> left == NULL && t -> right != NULL ){
  164.                 if(parent != NULL){
  165.                         if(parent -> left == t)
  166.                             parent -> left = t -> right;
  167.                         else if(parent -> right == t)
  168.                             parent -> right = t -> right;
  169.                 }
  170.                 else{
  171.                     root = t -> right;
  172.                 }
  173.         }
  174.  
  175.         else if(t -> left != NULL && t -> right == NULL ){
  176.                 if(parent != NULL){
  177.                     if(parent -> left == t)
  178.                         parent -> left = t -> left;
  179.                     else if(parent -> right == t)
  180.                         parent -> right = t -> left;
  181.                 }
  182.                 else{
  183.                     root = t -> left;
  184.                 }
  185.         }
  186.  
  187.         else if(t -> left != NULL && t -> right != NULL ){
  188.                 node* suc = t -> right;
  189.                 while(suc -> left != NULL)
  190.                     suc = suc -> left;
  191.                 int val = suc -> data;
  192.                 del(suc -> data);
  193.                 t -> data = val;
  194.             }
  195.     }
  196.     */
  197.  
  198.     /*void del(int key){
  199.         node* nn=new node;
  200.         nn->left=nn->right=NULL;
  201.         node* p=NULL;
  202.         node* t=root;
  203.         while(t!=NULL && t->data!=key){
  204.             p=t;
  205.             if(key>t->data){
  206.                 t=t->right;
  207.             }
  208.             else if(key<t->data){
  209.                 t=t->right;
  210.             }
  211.         }
  212.         if(t==NULL){
  213.             cout<<"data not found\n";
  214.         }
  215.         else{
  216.             if(key<p->data){
  217.              p->left=nn;
  218.         }
  219.             else if(key>p->data){
  220.                 p->right=nn;
  221.             }
  222.         }
  223.         free(t);
  224.     }
  225.     */
  226.  
  227. };
  228.  
  229. int main(){
  230.     BST b;
  231.     int ch = 10;
  232.         while(ch != 0){
  233.             cout << "\nEnter your choices: " << endl;
  234.             cout << "1: Add data" << endl;
  235.             cout << "2: Display inorder" << endl;
  236.             cout << "3: Display preorder" << endl;
  237.             cout << "4: Display postorder" << endl;
  238.             cout << "5: Delete data" << endl;
  239.             cout << "0: Exit" << endl;
  240.             cin >> ch;
  241.             switch(ch){
  242.                 case 1:
  243.                     int key;
  244.                     cout << "Enter the key" << endl;
  245.                     cin >> key;
  246.                     b.insert(key);
  247.                     break;
  248.                 case 2:
  249.                     b.inorder(b.getroot());
  250.                     break;
  251.                 case 3:
  252.                     b.preorder(b.getroot());
  253.                     break;
  254.                 case 4:
  255.                     b.postorder(b.getroot());
  256.                     break;
  257.                 case 5:
  258.                     cout << "Enter data to delete" << endl;
  259.                     int k;
  260.                     cin >> k;
  261.                     b.del(k);
  262.                     break;
  263.             }
  264.     }
  265.     return 0;
  266. }
  267.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement