Advertisement
codegod313

Gleb_7

May 29th, 2020
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.32 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <locale.h>
  5. #include <iostream>
  6. using namespace std;
  7.  
  8. struct tree
  9. {
  10.     int data;
  11.     tree * left;
  12.     tree * right;
  13. };
  14.  
  15. void add_to_q(tree *ochered[], int &e, tree *q)
  16. {
  17.     ochered[e++] = q;
  18. }
  19.  
  20. tree *q_pop(tree * ochered[], int &b)
  21. {
  22.     return ochered[b++];
  23. }
  24.  
  25. int average(tree *Tree, tree * ochered[], int &b, int &e)
  26. {
  27.     int ans = 0;
  28.     int n = 1;
  29.     b = 0;
  30.     e = 0;
  31.     add_to_q(ochered, e, Tree);
  32.     tree * a;
  33.     while (b!=e)
  34.     {
  35.         a = q_pop(ochered, b);
  36.         ans += a->data;
  37.         if (a->left != NULL)
  38.         {
  39.             add_to_q(ochered, e, a->left);
  40.             n++;
  41.         }
  42.            
  43.         if (a->right != NULL)
  44.         {
  45.             add_to_q(ochered, e, a->right);
  46.             n++;
  47.         }
  48.            
  49.     }
  50.     return ans / n;
  51. }
  52.  
  53. void deleter(tree * &Tree, tree *ochered[], int &b, int &e, int aver)
  54. {
  55.     b = e = 0;
  56.     int id = 0;
  57.     int m[100];
  58.     add_to_q(ochered, e, Tree);
  59.     tree * a;
  60.     while (b != e)
  61.     {
  62.         a = q_pop(ochered, b);
  63.         m[id++] = a->data;
  64.         if (a->left != NULL)
  65.         {
  66.             add_to_q(ochered, e, a->left);
  67.         }
  68.  
  69.         if (a->right != NULL)
  70.         {
  71.             add_to_q(ochered, e, a->right);
  72.         }
  73.     }
  74.     for (int i = 0; i < id; i++)
  75.     {
  76.         if (m[i] < aver)
  77.         {
  78.             m[i] = -99999;
  79.         }
  80.     }
  81.     b = e = 0;
  82.     int i = 0;
  83.     free(Tree);
  84.     Tree = (tree *)malloc(sizeof(tree));
  85.     Tree->left = NULL;
  86.     Tree->right = NULL;
  87.     add_to_q(ochered, e, Tree);
  88.     while (m[i] == -99999)
  89.     {
  90.         i++;
  91.     }
  92.     Tree->data = m[i++];
  93.     while (i!=id)
  94.     {
  95.         tree * a = q_pop(ochered, b);
  96.         a->left = (tree *)malloc(sizeof(tree));
  97.         a->left->left = NULL;
  98.         a->left->right = NULL;
  99.         while (i !=id && m[i] == -99999)
  100.         {
  101.             i++;
  102.         }
  103.         if (i == id) break;
  104.         a->left->data = m[i++];
  105.         if (i == id) break;
  106.         add_to_q(ochered, e, a->left);
  107.         if (i != id)
  108.         {
  109.             a->right = (tree*)malloc(sizeof(tree));
  110.             a->right->right = NULL;
  111.             a->right->left = NULL;
  112.             while (i != id && m[i] == -99999)
  113.             {
  114.                 i++;
  115.             }
  116.             if (i == id) break;
  117.             a->right->data = m[i++];;
  118.             add_to_q(ochered, e, a->right);
  119.         }
  120.     }
  121. }
  122.  
  123. void print(tree *Tree, tree * ochered[], int &b, int &e)
  124. {
  125.     b = e = 0;
  126.     int id = 0;
  127.     int m[100];
  128.     add_to_q(ochered, e, Tree);
  129.     tree * a;
  130.     while (b != e)
  131.     {
  132.         a = q_pop(ochered, b);
  133.         m[id++] = a->data;
  134.         if (a->left != NULL)
  135.         {
  136.             add_to_q(ochered, e, a->left);
  137.         }
  138.  
  139.         if (a->right != NULL)
  140.         {
  141.             add_to_q(ochered, e, a->right);
  142.         }
  143.     }
  144.     for (int i = 0; i < id; i++)
  145.     {
  146.         if(m[i] >-9999)
  147.         cout << m[i] << " ";
  148.     }
  149. }
  150.  
  151. int main()
  152. {
  153.     tree* Tree = (tree *)malloc(sizeof(tree));
  154.     Tree->left = NULL;
  155.     Tree->right = NULL;
  156.     int n;
  157.     tree* ochered[100];
  158.     int b = 0;
  159.     int e = 0;
  160.     cout << "Enter n" << endl;
  161.     cin >> n;
  162.     cout << "Enter numbers" << endl;
  163.     add_to_q(ochered, e, Tree);
  164.     cin >> Tree->data;
  165.     n--;
  166.     while (n != 0)
  167.     {
  168.         tree * a= q_pop(ochered, b);
  169.         a->left = (tree *)malloc(sizeof(tree));
  170.         a->left->left = NULL;
  171.         a->left->right = NULL;
  172.         cin >> a->left->data;
  173.         add_to_q(ochered, e, a->left);
  174.         n--;
  175.         if (n != 0)
  176.         {
  177.             a->right = (tree*)malloc(sizeof(tree));
  178.             cin >> a->right->data;
  179.             add_to_q(ochered, e, a->right);
  180.             a->right->right = NULL;
  181.             a->right->left = NULL;
  182.             n--;
  183.         }
  184.     }
  185.     int Average = average(Tree, ochered, b, e);
  186.     cout << "After deleting" << endl;
  187.     print(Tree, ochered, b, e);
  188.     deleter(Tree, ochered, b, e, Average);
  189.     cout << endl << "Before" << endl;
  190.     print(Tree,ochered,b,e);
  191. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement