Advertisement
encoree1996

bst

Jun 25th, 2016
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. #define N 25
  6.  
  7. typedef struct _bst
  8. {
  9.     struct _bst *left, *right;
  10.     int value;
  11. }BST;
  12.  
  13. void bst_inorder(BST* root)
  14. {
  15.     if(root != NULL)
  16.     {
  17.         bst_inorder(root->left);
  18.         printf("%d ",root->value);
  19.         bst_inorder(root->right);
  20.     }
  21. }
  22.  
  23. void bst_add(BST* root, int num)
  24. {
  25.     if(num < root->value)
  26.     {
  27.         if(root->left == NULL)
  28.         {
  29.             root->left = calloc(1,sizeof(BST));
  30.             root->left->value = num;
  31.         }else{
  32.             bst_add(root->left,num);
  33.         }
  34.     }else if(num > root->value)
  35.     {
  36.         if(root->right == NULL)
  37.         {
  38.             root->right = calloc(1,sizeof(BST));
  39.             root->right->value = num;
  40.         }else{
  41.             bst_add(root->right,num);
  42.         }
  43.     }
  44. }
  45.  
  46. void bst_free(BST* root)
  47. {
  48.     if(root != NULL)
  49.     {
  50.         bst_free(root->left);
  51.         bst_free(root->right);
  52.         free(root);
  53.     }
  54. }
  55.  
  56. int bst_greater(BST* root, int num)
  57. {
  58.     if(root != NULL)
  59.     {
  60.         if(num < root->value)
  61.         {
  62.             return bst_greater(root->left,num) + bst_greater(root->right,num) + 1;
  63.         }else{
  64.             return bst_greater(root->right,num);
  65.         }
  66.     }
  67.     return 0;
  68. }
  69.  
  70. int bst_smaller(BST* root, int num)
  71. {
  72.     if(root != NULL)
  73.     {
  74.         int retval = bst_smaller(root->left,num) + bst_smaller(root->right,num);
  75.         if(root->value < num)
  76.             ++retval;
  77.         return retval;
  78.     }
  79.     return 0;
  80. }
  81.  
  82. int main()
  83. {
  84.     int values_to_add[N], i, a = 50, b = 7;
  85.  
  86.     srand(time(NULL));
  87.     printf("Array contents: ");
  88.     for(i=0;i<N;i++)
  89.         printf("%d ",values_to_add[i] = rand()%100);
  90.  
  91.     printf("\n");
  92.  
  93.     BST* root = calloc(1,sizeof(BST));
  94.     root->value = values_to_add[0];
  95.  
  96.     for(i=1;i<N;i++)
  97.         bst_add(root,values_to_add[i]);
  98.  
  99.     printf("Binary tree: ");
  100.     bst_inorder(root);
  101.     printf("\nNumbers in bst tree greater than %d: %d\n",a,bst_greater(root,a));
  102.     printf("\nNumbers in bst tree smaller than %d: %d\n",b,bst_smaller(root,b));
  103.  
  104.     bst_free(root);
  105.  
  106.  
  107.     return 0;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement