Advertisement
Derga

Untitled

Jun 19th, 2024
437
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.41 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4.  
  5. struct Node {
  6.     int data;
  7.     Node* right;
  8.     Node* left;
  9. };
  10.  
  11. struct Tree {
  12.     Node* start = nullptr;
  13.  
  14.     Node* current = nullptr;
  15.     Node* current_minus_one = nullptr;
  16.     Node* receiver = nullptr;
  17.     Node* receiver_dad = nullptr;
  18.  
  19.     void add(int element) {
  20.         Node* node = new Node(element, nullptr, nullptr);
  21.         if (start == nullptr) {
  22.             start = node;
  23.             return;
  24.         }
  25.         current = start;
  26.         while (current != nullptr) {
  27.             current_minus_one = current;
  28.             if (element > current->data) {
  29.                 current = current->right;
  30.             }
  31.             else {
  32.                 current = current->left;
  33.             }
  34.         }
  35.         if (element > current_minus_one->data) {
  36.             current_minus_one->right = node;
  37.         }
  38.         else {
  39.             current_minus_one->left = node;
  40.         }
  41.     }
  42.  
  43.     int depht(Node* cur) { // вносится старт
  44.         if (cur == nullptr) {
  45.             return 0;
  46.         }
  47.         else if ((cur->left == nullptr) && (cur->right == nullptr)) {
  48.             return 1;
  49.         }
  50.         else if ((cur->left != nullptr) && (cur->right == nullptr)) {
  51.             return 1 + this->depht(cur->left);
  52.         }
  53.         else if ((cur->left == nullptr) && (cur->right != nullptr)) {
  54.             return 1 + this->depht(cur->right);
  55.         }
  56.         else if ((cur->left != nullptr) && (cur->right != nullptr)) {
  57.             return 1 + std::max({ this->depht(cur->left), this->depht(cur->right) });
  58.         }
  59.         return -1;
  60.     }
  61.  
  62.     int elementCount(Node* cur) { // вносится старт
  63.         if (cur == nullptr) {
  64.             return 0;
  65.         }
  66.         else if ((cur->left == nullptr) && (cur->right == nullptr)) {
  67.             return 1;
  68.         }
  69.         else if ((cur->left != nullptr) && (cur->right == nullptr)) {
  70.             return 1 + this->depht(cur->left);
  71.         }
  72.         else if ((cur->left == nullptr) && (cur->right != nullptr)) {
  73.             return 1 + this->depht(cur->right);
  74.         }
  75.         else if ((cur->left != nullptr) && (cur->right != nullptr)) {
  76.             return 1 + this->depht(cur->left) + this->depht(cur->right);
  77.         }
  78.         return -1;
  79.     }
  80.  
  81.     void print(Node* cur) { // вносится старт
  82.         if (this->start == nullptr) {
  83.             std::cout << "дерево не содержит элементов \n";
  84.             return;
  85.         }
  86.         if (cur->left != nullptr) {
  87.             this->print(cur->left);
  88.         }
  89.  
  90.         std::cout << cur->data << " ";
  91.  
  92.         if (cur->right != nullptr) {
  93.             this->print(cur->right);
  94.         }
  95.     }
  96.  
  97.     void sumOfEven(Node* cur, int* sum_of_even) { // вносится старт
  98.         if (cur == nullptr) {
  99.             return;
  100.         }
  101.         else {
  102.             if (cur->data % 2 == 0) {
  103.                 (*sum_of_even) += cur->data;
  104.             }
  105.             this->sumOfEven(cur->left, sum_of_even);
  106.             this->sumOfEven(cur->right, sum_of_even);
  107.         }
  108.     }
  109.  
  110.     void countOfEven(Node* cur, int* count_of_even) {
  111.         if (cur == nullptr) {
  112.             return;
  113.         }
  114.         if (cur->data % 2 == 0) {
  115.             ++(*count_of_even);
  116.         }
  117.         this->countOfEven(cur->left, count_of_even);
  118.         this->countOfEven(cur->right, count_of_even);
  119.  
  120.     }
  121.  
  122. };
  123.  
  124. int main()
  125. {
  126.     setlocale(LC_ALL, "Russian");
  127.  
  128.     Tree tree;
  129.     int tree_len;
  130.     int element;
  131.     float mean_of_even;
  132.     int count_of_even = 0;
  133.     int sum_of_even = 0;
  134.     std::cout << "введите количество элементов в дереве: \n";
  135.     std::cin >> tree_len;
  136.     std::cout << "введите эленты дерева: \n";
  137.     for (int i = 0; i < tree_len; ++i) {
  138.         std::cin >> element;
  139.         tree.add(element);
  140.     }
  141.     tree.print(tree.start);
  142.     std::cout << "\n";
  143.  
  144.     tree.countOfEven(tree.start, &count_of_even);
  145.     tree.sumOfEven(tree.start, &sum_of_even);
  146.  
  147.     if (count_of_even != 0) {
  148.         mean_of_even = (float)sum_of_even / (float)count_of_even;
  149.         std::cout << "среднее занчение всех четных элементов дерева: " << mean_of_even << "\n";
  150.     }
  151.     else {
  152.         std::cout << "дерево не содержит четных элементов \n";
  153.     }
  154.  
  155.     return 0;
  156. }
  157.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement