lKinder_Bueno

Untitled

Jan 30th, 2018
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.32 KB | None | 0 0
  1. ////////////////////////////
  2. //        LIBRARY
  3. ///////////////////////////
  4.  
  5. typedef int TInfo;
  6.  
  7. typedef struct TTreeNode {
  8.     TInfo info;
  9.     struct TTreeNode *left;
  10.     struct TTreeNode *right;
  11. } TTreeNode;
  12. typedef TTreeNode *TBinaryTree;
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19. void tree_destroy(TBinaryTree *ptree) {
  20.     if (*ptree == NULL)
  21.         return;
  22.     tree_destroy(&(*ptree)->left);
  23.     tree_destroy(&(*ptree)->right);
  24.     tree_node_destroy(*ptree);
  25.     *ptree=NULL;
  26. }
  27.  
  28.  
  29.  
  30.  
  31.  
  32. TTreeNode *tree_node_create(TInfo info, TTreeNode *left, TTreeNode *right) {
  33.     TTreeNode *node=(TTreeNode *)malloc(sizeof(TTreeNode));
  34.     assert(node!=NULL);
  35.     node->info=info;
  36.     node->left=left;
  37.     node->right=right;
  38.     return node;
  39. }
  40.  
  41.  
  42. void tree_node_destroy(TTreeNode *node) {
  43.     assert(node!=NULL);
  44.     free(node);
  45. }
  46.  
  47.  
  48. TBinaryTree tree_create(void) {
  49.     return NULL;
  50. }
  51.  
  52. void tree_destroy(TBinaryTree *ptree) {
  53.     if (*ptree == NULL)
  54.         return;
  55.     tree_destroy(&(*ptree)->left);
  56.     tree_destroy(&(*ptree)->right);
  57.     tree_node_destroy(*ptree);
  58.     *ptree=NULL;
  59. }
  60.  
  61. TBinaryTree tree_insert(TBinaryTree tree, TInfo x) {
  62.     if (tree==NULL)
  63.         return tree_node_create(x, NULL, NULL);
  64.     else if (less(x, tree->info)) {
  65.         tree->left=tree_insert(tree->left, x);
  66.     } else {
  67.         tree->right=tree_insert(tree->right, x);
  68.     }
  69.     return tree;
  70. }
  71.  
  72. TBinaryTree tree_read(int n) {
  73.     assert(n>=0);
  74.     if (n==0)
  75.         return tree_create();
  76.     TBinaryTree t=tree_read(n-1);
  77.     TInfo x;
  78.     scanf("%d", &x);
  79.     return tree_insert(t, x);
  80. }
  81.  
  82.  
  83. void tree_print(TBinaryTree tree) {
  84.     if (tree==NULL)
  85.         return;
  86.     tree_print(tree->left);
  87.     printf("%d ", tree->info);
  88.     tree_print(tree->right);
  89. }
  90.  
  91.  
  92.  
  93. //////////////////////////
  94. //     MAIN.C
  95. //////////////////////////
  96. int main(int argc, char** argv) {
  97.     TBinaryTree tree=tree_create();
  98.     int n;
  99.     printf("Elements number: ");
  100.     scanf("%d",&n);
  101.     printf("Insert tree items: ");
  102.     tree=tree_read(n);
  103.     int min;
  104.  
  105.  
  106.     min=tree_delete_min(&tree);
  107.     tree_print(tree);
  108. }
  109.  
  110. TInfo tree_delete_min(TBinaryTree *tree){
  111.    int min;
  112.     if((*tree)->left==NULL){
  113.         min=(*tree)->info;
  114.         tree_node_destroy(*tree);
  115.         return min;
  116.     }
  117.     else min=tree_delete_min(&(*tree)->left);
  118.    return min;
  119. }
Advertisement
Add Comment
Please, Sign In to add comment