bnghtz

binary_tree_with_linked_list.c

Feb 3rd, 2014
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.70 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. // declareate type
  6. struct myTree {
  7.     int val;
  8.     int ser;
  9.     struct myTree *left, *right;
  10. };
  11. typedef struct myTree    node;
  12.  
  13. // inserting
  14. void insert(node **tree, int val, int ser)
  15. {
  16.     // empty
  17.     if (!(*tree))
  18.     {
  19.         node *item = NULL;
  20.         item = (node *) malloc(sizeof(node));
  21.  
  22.         item->val = val;
  23.         item->ser = ser;
  24.         item->left = item->right = NULL;
  25.  
  26.         *tree = item;
  27.         return;
  28.     }
  29.  
  30.     if (val < (*tree)->val)
  31.         insert( &((*tree)->left), val, ser );
  32.     else
  33.         insert( &((*tree)->right), val, ser );
  34. }
  35.  
  36. node * search(node **tree, int val)
  37. {
  38.     // empty
  39.     if (!(*tree))
  40.         return NULL;
  41.  
  42.     // hit
  43.     if (val == (*tree)->val)
  44.         return (*tree);
  45.  
  46.     // search
  47.     if (val < (*tree)->val)
  48.         search( &((*tree)->left), val );
  49.     else
  50.         search( &((*tree)->right), val );
  51. }
  52.  
  53. void printPreorder(node *tree)
  54. {
  55.     if (tree)
  56.     {
  57.         printf("%2d.:    %3d\n", tree->ser, tree->val);
  58.         printPreorder(tree->left);
  59.         printPreorder(tree->right);
  60.     }
  61. }
  62.  
  63. void printInorder(node *tree)
  64. {
  65.     if (tree)
  66.     {
  67.         printInorder(tree->left);
  68.         printf("%2d.:    %3d\n", tree->ser, tree->val);
  69.         printInorder(tree->right);
  70.     }
  71. }
  72.  
  73. void printPostorder(node *tree)
  74. {
  75.     if (tree)
  76.     {
  77.         printPostorder(tree->left);
  78.         printPostorder(tree->right);
  79.         printf("%2d.:    %3d\n", tree->ser, tree->val);
  80.     }
  81. }
  82.  
  83. void deltree(node *tree)
  84. {
  85.     if (tree)
  86.     {
  87.         deltree(tree->left);
  88.         deltree(tree->right);
  89.  
  90.         tree->left = tree->right = NULL;
  91.         free(tree);
  92.     }
  93. }
  94.  
  95. int main(int argc, char * argv[])
  96. {
  97.     node *root, *temp;
  98.     int i, ser;
  99.     root = NULL;
  100.     ser = 0;
  101.  
  102.     // insert
  103.     insert(&root, 9, ++ser);
  104.     int e[] = {12, 1, 47, 3, 0, 4, 7, 32, 8, 15};
  105.     int max_feltoltes = 9;
  106.     int len = (int)(sizeof(e) / sizeof(int));
  107.     for (i = 0; i < len && i < max_feltoltes -1; i++)
  108.         insert(&root, e[i], ++ser);
  109.  
  110.     i = 4;
  111.     printf("\nSearching for number %d\n", i);
  112.     temp = search(&root, i);
  113.     if (temp)
  114.         printf("find: %2d.: %3d\n", temp->ser, temp->val);
  115.     else
  116.         printf("the number [%3d] is not in the tree.\n", i);
  117.  
  118.  
  119.     // print
  120.     printf("\nPrinting in Preorder\n");
  121.     printPreorder(root);
  122.  
  123.     printf("\nPrinting in Inorder\n");
  124.     printInorder(root);
  125.  
  126.     printf("\nPrinting in Postorder\n");
  127.     printPostorder(root);
  128.  
  129.     // delete
  130.     printf("\nDeleting root\n");
  131.     deltree(root);
  132.     root = NULL;
  133.  
  134.  
  135.     // print
  136.     printf("\nPrinting in Inorder\n");
  137.     printInorder(root);
  138.  
  139.     return 0;
  140. }
Advertisement
Add Comment
Please, Sign In to add comment