Advertisement
sp1d3o

Tree

Jan 10th, 2022
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.80 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. //přidání, za/před konkrétní prvek, smazání prvku před/za, modifikace dat, vyvážení stromu
  4. typedef struct t_Node {
  5.     int key;
  6.     struct t_Node *left;
  7.     struct t_Node *right;
  8. } t_Node_t;
  9.  
  10.  
  11. t_Node_t *newNode(int item)         //creating new node
  12. {
  13.     t_Node_t *tmp = (t_Node_t *)malloc(sizeof(t_Node_t));
  14.  
  15.     tmp->key = item;
  16.  
  17.     tmp->left = tmp->right = NULL;
  18.  
  19.     return tmp;
  20. }
  21.  
  22. void inord_trav(t_Node_t *root)     //inorder traversal w/recursion
  23. {
  24.     if(root != NULL) {
  25.         inord_trav(root->left);
  26.         printf("%d\n", root->key);
  27.         inord_trav(root->right);
  28.     }
  29. }
  30.  
  31. t_Node_t *insert_key(t_Node_t *node, int given_key)      //inserting node with given data value
  32. {
  33.     if(node == NULL) {
  34.         return newNode(given_key);
  35.     }
  36.  
  37.     if(given_key < node->key) {
  38.         node->left = insert_key(node->left, given_key);
  39.     }
  40.     else if(given_key > node->key) {
  41.         node->right = insert_key(node->right, given_key);
  42.     }
  43.  
  44.     return node;
  45. }
  46.  
  47. t_Node_t *find_MinValue(t_Node_t *node)     //finding node with minimal value => topmost left leaf of the tree
  48. {
  49.     t_Node_t *current = node;
  50.  
  51.     while(current && current->left != NULL) {
  52.         current = current->left;
  53.     }
  54.  
  55.     return current;
  56. }
  57.  
  58. t_Node_t *del_node(t_Node_t *root, int marker)
  59. {
  60.     if(root == NULL) {
  61.         return root;
  62.     }
  63.  
  64.     if(marker < root->key) {
  65.         root->left = del_node(root->left, marker);
  66.     }
  67.  
  68.     else if(marker > root->key) {
  69.         root->right = del_node(root->right, marker);
  70.     }
  71.  
  72.     else {
  73.         if(root->left == NULL) {
  74.             t_Node_t *tmp = root->right;
  75.             free(root);
  76.             root = NULL;
  77.             return tmp;
  78.         }
  79.  
  80.         else if(root->right == NULL) {
  81.             t_Node_t *tmp = root->left;
  82.             free(root);
  83.             root = NULL;
  84.             return tmp;
  85.         }
  86.  
  87.         t_Node_t *tmp = find_MinValue(root->right);
  88.  
  89.         root->key = tmp->key;
  90.  
  91.         root->right = del_node(root->right, tmp->key);
  92.     }
  93.  
  94.     return root;
  95. }
  96.  
  97. int main()
  98. {
  99.     t_Node_t *root = NULL;
  100.  
  101.     //creating root
  102.     root = insert_key(root, 50);
  103.  
  104.     //creating childs
  105.     insert_key(root, 30);
  106.     insert_key(root, 20);
  107.     insert_key(root, 40);
  108.     insert_key(root, 70);
  109.     insert_key(root, 60);
  110.     insert_key(root, 80);
  111.  
  112.     //print in inorder traversal
  113.     printf("Inorder traversal of the given tree\n\n");
  114.     inord_trav(root);
  115.  
  116.     //deleting 20
  117.     printf("\nDelete 20\n");
  118.     root = del_node(root, 20);
  119.     printf("\nPrinting modified tree\n\n");
  120.     inord_trav(root);
  121.  
  122.     //deleting 30
  123.     printf("\nDelete 30\n");
  124.     root = del_node(root, 30);
  125.     printf("\nPrinting modified tree\n\n");
  126.     inord_trav(root);
  127.  
  128.  
  129.     return 0;
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement