cavaman

8.7

Jun 9th, 2021 (edited)
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.41 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. //бинарное дерево
  7. class Tree {
  8.  
  9.     //узел дерева
  10.     struct Node {
  11.         int info;
  12.         Node* left; //указатель на левое поддерево
  13.         Node* right; //правое
  14.  
  15.         Node(int info) {
  16.             this->info = info;
  17.             left = right = nullptr;
  18.         }
  19.     };
  20.  
  21.     Node* root; //корень дерева
  22.  
  23. protected:
  24.  
  25.     //добавление
  26.     void add(Node*& root, int info) {
  27.         if (root) {
  28.             if (root->info < info) {
  29.                 add(root->right, info);
  30.             }
  31.             else {
  32.                 add(root->left, info);
  33.             }
  34.         }
  35.         else {
  36.             root = new Node(info);
  37.         }
  38.     }
  39.  
  40.     //вывод дерева с учетом уровня
  41.     void print(Node* root, int lvl = 0) {
  42.         if (root) {
  43.             print(root->right, lvl + 1);
  44.             for (int i = 0; i < lvl; i++) {
  45.                 cout << "  ";
  46.             }
  47.             cout << root->info << endl;
  48.             print(root->left, lvl + 1);
  49.         }
  50.     }
  51.  
  52.     //7
  53.     void calc(Node* root,int lvl,int& res, int l = 0) {
  54.         if (root) {
  55.             calc(root->left, lvl, res, l + 1);
  56.             if (l == lvl) {
  57.                 res++;
  58.             }
  59.             calc(root->right, lvl, res, l + 1);
  60.         }
  61.     }
  62.  
  63.     //очистка
  64.     void clear(Node*& root) {
  65.         if (root) {
  66.             clear(root->left);
  67.             clear(root->right);
  68.             delete root;
  69.             root = nullptr;
  70.         }
  71.     }
  72.  
  73. public:
  74.  
  75.     //конструктор
  76.     Tree() {
  77.         root = nullptr;
  78.     }
  79.  
  80.     //добавление элемента в дерево
  81.     void add(int info) {
  82.         add(root, info);
  83.     }
  84.  
  85.     //вывод элементов дерева
  86.     void print() {
  87.         print(root);
  88.     }
  89.  
  90.     //подсчет
  91.     int calc(int lvl) {
  92.         int res = 0;
  93.         calc(root,lvl,res);
  94.         return res;
  95.     }
  96.  
  97.     //деструктор
  98.     ~Tree() {
  99.         clear(root);
  100.     }
  101. };
  102.  
  103. //для теста
  104. int main() {
  105.     srand(time(NULL));
  106.     system("chcp 1251"); //кодировка страницы
  107.     system("cls");
  108.     //заполняем случайно дерево
  109.     int n = 0;
  110.     cout << "Укажите размер дерева -> ";
  111.     cin >> n;
  112.     if (n <= 0) {
  113.         n = 10;
  114.     }
  115.     Tree tr;
  116.     for (int i = 0; i < n; i++) {
  117.         tr.add(rand() % 100);
  118.     }
  119.     cout << "Сформированное дерево:" << endl;
  120.     tr.print();
  121.  
  122.     //функция по заданию
  123.     cout << "Укажите уровень дерева (0 - корень) -> ";
  124.     int lvl;
  125.     cin >> lvl;
  126.     cout << "Число вершин на " << lvl << " уровне дерева = " << tr.calc(lvl) << endl;
  127.     system("pause");
  128.     return 0;
  129. }
Add Comment
Please, Sign In to add comment