Searching of Tree Program in C

  1. /*searching of tree*/  
  2. #include<stdio.h>  
  3. struct rec  
  4. {  
  5.     long num;  
  6.     struct rec *left;  
  7.     struct rec *right;  
  8. };  
  9. struct rec *tree=NULL;  
  10. struct rec *tree;  
  11. struct rec *delnum(long digit,struct rec *r);  
  12. struct rec *insert(struct rec *tree,long num);  
  13. struct rec *deletenode(long digit,struct rec *tree);  
  14. void search(struct rec *tree,long num);  
  15. void preorder(struct rec *tree);  
  16. void inorder(struct rec *tree);  
  17. void postorder(struct rec *tree);  
  18. void main()  
  19. {  
  20. int choice;  
  21. long digit;  
  22. int element;  
  23.     do  
  24.       {  
  25.         choice=select();  
  26.         switch(choice)  
  27.          {  
  28.            case 1: puts("Enter integer: To quit enter 0");  
  29.                scanf("%ld",&digit);  
  30.                while(digit!=0)  
  31.                 {  
  32.                    tree=insert(tree,digit);  
  33.                    scanf("%ld",&digit);  
  34.                 }continue;  
  35.            case 2: puts("Enter the number to be search");  
  36.                scanf("%ld",&digit);  
  37.                search(tree,digit);  
  38.                continue;  
  39.            case 3: puts("\npreorder traversing TREE");  
  40.                preorder(tree);continue;  
  41.            case 4: puts("\ninorder traversing TREEE");  
  42.                inorder(tree);continue;  
  43.            case 5: puts("\npostorder traversing TREE");  
  44.                postorder(tree);continue;  
  45.            case 6: puts("Enter element which do you wanbt delete from  the BST");  
  46.                 scanf("%ld",&digit);  
  47.                deletenode(digit,tree);continue;  
  48.            case 7: puts("END");exit(0);  
  49.         }  
  50.     }while(choice!=7);  
  51. }  
  52. int select()  
  53. {  
  54. int selection;  
  55.     do  
  56.       {  
  57.         puts("Enter 1: Insert a node in the BST");  
  58.         puts("Enter 2: Search a node in BST");  
  59.         puts("Enter 3: Display(preorder)the BST");  
  60.         puts("Enter 4: Display(inorder)the BST");  
  61.         puts("Enter 5: Display(postorder) the BST");  
  62.         puts("Enter 6: Delete the element");  
  63.         puts("Enter 7: END");  
  64.         puts("Enter your choice");  
  65.         scanf("%d",&selection);  
  66.              if((selection<1)||(selection>7))  
  67.             {  
  68.               puts("wrong choice:Try again");  
  69.               getch(); }  
  70.        }while((selection<1)||(selection>7));  
  71.        return (selection);  
  72. }  
  73. struct rec *insert(struct rec *tree,long digit)  
  74. {  
  75.     if(tree==NULL)  
  76.       {  
  77.         tree=(struct rec *)malloc(sizeof(struct rec));  
  78.         tree->left=tree->right=NULL;  
  79.         tree->num=digit;  
  80.       }  
  81.      else  
  82.       if(digit<tree->num)  
  83.         tree->left=insert(tree->left,digit);  
  84.      else  
  85.       if(digit>tree->num)  
  86.         tree->right=insert(tree->right,digit);  
  87.      else if(digit==tree->num)  
  88.         {  
  89.            puts("Duplicate node:program exited");exit(0);  
  90.         }  
  91.         return(tree);  
  92. }  
  93. struct rec *delnum(long digit,struct rec *r)  
  94. {  
  95. struct rec *q;  
  96. if(r->right!=NULL)delnum(digit,r->right);  
  97. else  
  98. q->num=r->num;  
  99. q=r;  
  100. r=r->left;  
  101. }  
  102. struct rec *deletenode(long digit,struct rec *tree)  
  103. {  
  104. struct rec *r,*q;  
  105. if(tree==NULL)  
  106. {  
  107. puts("Tree is empty.");  
  108. exit(0);  
  109. }  
  110. if(digit<tree->num)  
  111. deletenode(digit,tree->left);  
  112. else  
  113. if(digit>tree->num)deletenode(digit,tree->right);  
  114. q=tree;  
  115. if((q->right==NULL)&&(q->left==NULL))  
  116. q=NULL;  
  117. else  
  118. if(q->right==NULL)tree=q->left;else  
  119. if(q->left==NULL)tree=tree=q->right;else  
  120. delnum(digit,q->left);  
  121. free(q);  
  122. }  
  123. void search(struct rec *tree,long digit)  
  124. {  
  125.     if(tree==NULL)  
  126.        puts("The number does not exits\n");  
  127.    else  
  128.     if(digit==tree->num)  
  129.     printf("Number=%ld\n" ,digit);  
  130.    else  
  131.     if(digit<tree->num)  
  132.        search(tree->left,digit);  
  133.    else  
  134.       search(tree->right,digit);  
  135. }  
  136. void preorder(struct rec *tree)  
  137. {  
  138.     if(tree!=NULL)  
  139.       {  
  140.         printf("%12ld\n",tree->num);  
  141.         preorder(tree->left);  
  142.         preorder(tree->right);  
  143.       }  
  144. }  
  145. void inorder(struct rec *tree)  
  146. {  
  147.     if(tree!=NULL)  
  148.         {  
  149.         inorder(tree->left);  
  150.         printf("%12ld\n",tree->num);  
  151.         inorder(tree->right);  
  152.         }  
  153. }  
  154. void postorder(struct rec *tree)  
  155. {  
  156.     if(tree!=NULL)  
  157.       {  
  158.         postorder(tree->left);  
  159.         postorder(tree->right);  
  160.         printf("%12ld\n",tree->num);  
  161.       }  
  162.