cavaman

8.11

Jun 9th, 2021
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.45 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.     //11
  53.     bool same(Node* root) {
  54.         if (root) {
  55.             if (root->left) {
  56.                 if (root->left->info == root->info) {
  57.                     return true;
  58.                 }
  59.             }
  60.             return same(root->left) || same(root->right);
  61.         }
  62.         return false;
  63.     }
  64.  
  65.     //очистка
  66.     void clear(Node*& root) {
  67.         if (root) {
  68.             clear(root->left);
  69.             clear(root->right);
  70.             delete root;
  71.             root = nullptr;
  72.         }
  73.     }
  74.  
  75. public:
  76.  
  77.     //конструктор
  78.     Tree() {
  79.         root = nullptr;
  80.     }
  81.  
  82.     //добавление элемента в дерево
  83.     void add(int info) {
  84.         add(root, info);
  85.     }
  86.  
  87.     //вывод элементов дерева
  88.     void print() {
  89.         print(root);
  90.     }
  91.  
  92.     //проверка на уникальность
  93.     bool same() {
  94.         return same(root); //same(T)
  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.     if (tr.same()) {
  124.         cout << "В дереве есть хотя бы два одинаковых элемента!" << endl;
  125.     }
  126.     else {
  127.         cout << "В дереве только уникальные элементы!" << endl;
  128.     }
  129.     system("pause");
  130.     return 0;
  131. }
Advertisement
Add Comment
Please, Sign In to add comment