Advertisement
Bewin

binarySearchTree

Dec 6th, 2023 (edited)
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.66 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct node{
  4.     int data;
  5.     struct node* rightl;
  6.     struct node* leftl;
  7. };
  8. struct node* root=NULL;
  9. struct node* parent=NULL;
  10.  
  11. int insert_data(){
  12.     int item;
  13.     printf("Enter data to be inserted:");
  14.     scanf("%d",&item);
  15.     return item;
  16. }
  17. void preorder(struct node* ptr){
  18.     if(ptr!=NULL){
  19.         printf("%d\t",ptr->data);
  20.         preorder(ptr->leftl);
  21.         preorder(ptr->rightl);
  22.     }
  23. }
  24. void inorder(struct node* ptr){
  25.     if(ptr!=NULL){
  26.         inorder(ptr->leftl);
  27.         printf("%d\t",ptr->data);
  28.         inorder(ptr->rightl);
  29.     }
  30. }
  31. void postorder(struct node* ptr){
  32.     if(ptr!=NULL){
  33.         postorder(ptr->leftl);
  34.         postorder(ptr->rightl);
  35.         printf("%d\t",ptr->data);
  36.     }
  37. }
  38. struct node* search(int item){
  39.     struct node* current=root;
  40.     parent=NULL;
  41.     while(current!=NULL){
  42.         if(current->data==item){
  43.             break;
  44.         }
  45.         else{
  46.             parent=current;
  47.             if(item>current->data)
  48.                 current=current->rightl;
  49.             else
  50.                 current=current->leftl;
  51.         }
  52.     }
  53.     return current;
  54. }
  55. void insertion(){
  56.     struct node* current;
  57.     struct node* newnode;
  58.     newnode = (struct node*)malloc(sizeof(struct node));
  59.     int item=newnode->data=insert_data();
  60.     newnode->rightl=NULL;
  61.     newnode->leftl=NULL;
  62.     if(root==NULL)
  63.         root=newnode;
  64.     else{
  65.         current=root;
  66.         parent=NULL;
  67.         while(current!=NULL){
  68.             parent=current;
  69.             if(item>current->data)
  70.                 current=current->rightl;
  71.             else if(item<current->data)
  72.                 current=current->leftl;
  73.             else{
  74.                 printf("Duplicate node");
  75.                 return;
  76.             }
  77.         }
  78.         if(item>parent->data)
  79.             parent->rightl=newnode;
  80.         else
  81.             parent->leftl=newnode;
  82.     }
  83. }
  84. struct node* successor(struct node* temp){
  85.     if(temp!=NULL){
  86.         while(temp->leftl!=NULL)
  87.             temp=temp->leftl;
  88.     }
  89.     return temp;
  90. }
  91. void deletion(int delItem){
  92.     struct node* current;
  93.     if(root==NULL){
  94.         printf("Empty Tree\n");
  95.         return;
  96.     }
  97.     current = search(delItem);
  98.     if(current==NULL)
  99.         printf("\nItem not Found!\n");
  100.     else if(current->leftl==NULL && current->rightl==NULL){
  101.         if(parent==NULL){
  102.             free(current);
  103.             root=NULL;
  104.         }
  105.         else if(parent->leftl==current){
  106.             parent->leftl=NULL;
  107.             free(current);
  108.         }
  109.         else if(parent->rightl==current){
  110.             parent->rightl=NULL;
  111.             free(current);
  112.         }
  113.     }
  114.     else if(current->leftl==NULL && current->rightl!=NULL){
  115.         if(parent==NULL){
  116.             free(current);
  117.             root=current->rightl;
  118.         }
  119.         else if(parent->leftl==current){
  120.             parent->leftl=current->rightl;
  121.             free(current);
  122.         }
  123.         else if(parent->rightl==current){
  124.             parent->rightl=current->rightl;
  125.             free(current);
  126.         }
  127.     }
  128.     else if(current->leftl!=NULL && current->rightl==NULL){
  129.         if(parent==NULL){
  130.             free(current);
  131.             root=current->leftl;
  132.         }
  133.         else if(parent->leftl==current){
  134.             parent->leftl=current->leftl;
  135.             free(current);
  136.         }
  137.         else if(parent->rightl==current){
  138.             parent->rightl=current->leftl;
  139.             free(current);
  140.         }
  141.     }
  142.     else if(current->leftl!=NULL && current->rightl!=NULL){
  143.         struct node* succ;
  144.         succ=successor(current->rightl);
  145.         delItem=succ->data;
  146.         deletion(delItem);
  147.         current->data=delItem;
  148.     }
  149. }
  150. int main(){
  151.     int arg;
  152.     while(1){
  153.         printf("\n******************");
  154.         printf("\nEnter your choice:\n1. Insertion\n2. Traversal\n3. Deletion\n4. Search\n0. Exit");
  155.         printf("\n******************\n");
  156.         scanf("%d",&arg);
  157.         switch(arg){
  158.             case 1:
  159.                 insertion();
  160.                 break;
  161.             case 2:{
  162.                 int search_arg;
  163.                 printf("\n*****_TRAVERSAL MENU_*****");
  164.                 printf("\nEnter your choice:\n1. PreOrder\n2. InOrder\n3. PostOrder");
  165.                 printf("\n**************************\n");
  166.                 scanf("%d",&search_arg);
  167.                 switch(search_arg){
  168.                     case 1:
  169.                         printf("\nPreOrder: ");
  170.                         preorder(root);
  171.                         break;
  172.                     case 2:
  173.                         printf("\nInOrder:   ");
  174.                         inorder(root);
  175.                         break;
  176.                     case 3:
  177.                         printf("\nPostOrder: ");
  178.                         postorder(root);
  179.                         break;
  180.                 }
  181.                 printf("\n");
  182.                 break;
  183.             }
  184.             case 3:{
  185.                 int item;
  186.                 printf("Enter item to be deleted:");
  187.                 scanf("%d",&item);
  188.                 deletion(item);
  189.                 break;
  190.             }
  191.             case 4:{
  192.                 int item;
  193.                 printf("Enter item to be searched: ");
  194.                 scanf("%d",&item);
  195.                 struct node* current=search(item);
  196.                 if(current==NULL)
  197.                     printf("Item not Found");
  198.                 else
  199.                     printf("Item Found");
  200.                 break;
  201.             }
  202.             case 0:
  203.                 exit(0);
  204.             default:
  205.                 printf("Invalid Argument!");
  206.                 break;
  207.         }
  208.     }
  209. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement