Advertisement
Korotkodul

tree9

Apr 12th, 2025 (edited)
297
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.27 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. const int inf = 2e9;
  6.  
  7. struct node {
  8.     node* parent;
  9.     node* l;
  10.     node* r;
  11.     int val;
  12.  
  13.     node(node* par) : parent(par), l(nullptr), r(nullptr), val(inf) {}
  14.     node() : parent(nullptr), l(nullptr), r(nullptr), val(inf) {}
  15. };
  16.  
  17. struct tree {
  18.     vector<int> arr; // используется ТОЛЬКО для инициализации дерева
  19.     node* main_root; // Изменен на указатель для удобства
  20.  
  21.     // Создает поддерево
  22.     node* create_subtree(node* par, int Li, int Ri) {
  23.         if (Li > Ri) return nullptr; // Проверка на правильные границы
  24.  
  25.         node* root = new node(par);
  26.         root->val = arr[(Ri + Li) / 2]; // устанавливаем значение корня
  27.  
  28.         // Создание левого и правого поддеревьев
  29.         root->l = create_subtree(root, Li, (Ri + Li) / 2 - 1);
  30.         root->r = create_subtree(root, (Ri + Li) / 2 + 1, Ri);
  31.  
  32.         return root; // Возвращаем указатель на созданный узел
  33.     }
  34.  
  35.     // Инициализация дерева
  36.     void create(vector<int> a) {
  37.         arr = a;
  38.         if (a.size() == 0) {
  39.             main_root = nullptr; // В случае пустого массива
  40.         } else {
  41.             main_root = create_subtree(nullptr, 0, arr.size() - 1);
  42.         }
  43.         cout << "Tree created\n";
  44.     }
  45.  
  46.     // Обход дерева (in-order)
  47.     void trav(node* root) {
  48.         if (root == nullptr) return; // Проверка на nullptr
  49.         trav(root->l); // Обход левого поддерева
  50.         cout << root->val << " "; // Обработка текущего узла
  51.         trav(root->r); // Обход правого поддерева
  52.     }
  53. };
  54.  
  55. int main() {
  56.     tree T;
  57.     vector<int> a = {1, 2, 3, 4, 5, 6, 7,8, 9, 10, 11};
  58.     T.create(a);
  59.     cout << "TRAVERSAL ORDER:\n";
  60.     T.trav(T.main_root);
  61.     cout << endl;
  62.  
  63.     // Освобождение памяти
  64.     // Здесь может быть реализована функция для удаления дерева и освобождения памяти
  65.     return 0;
  66. }
  67.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement