Advertisement
Korotkodul

tree5

Apr 12th, 2025
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.24 KB | None | 0 0
  1. #include <iostream>
  2. #include <sstream>
  3. #include <exception>
  4. #include <cmath>
  5. #include <unordered_set>
  6. #include <vector>
  7. #include <unordered_map>
  8. #include <algorithm>
  9. using namespace std;
  10.  
  11. const int inf = 2e9;
  12.  
  13. struct node{
  14.     node* self;
  15.     node* parent;
  16.     node* l;
  17.     node* r;
  18.     int val;
  19.     node(node *par) : parent(par), l(nullptr), r(nullptr), self(this), val(inf) {}
  20.     node() : parent(nullptr), l(nullptr), r(nullptr), self(this),val (inf) {}
  21.     node(node *par, node *L, node *R) : parent(par), l(L), r(R), self(this), val(inf) {}
  22. };
  23.  
  24. struct tree{
  25.     vector <int> arr; //используется ТОЛЬКО для инициализациидерева
  26.     node main_root;
  27.     node create_subtree(node* par, int Li, int Ri) {
  28.         /*Ri == Li + 2 - работает по алгоритмы
  29.         Ri == Li + 1 - особ случ
  30.         Ri == Li - особ случ*/
  31.         cout << "Li Ri: " << Li << ' ' << Ri << "\n";
  32.         node root(par);
  33.         root.val = this->arr[(Ri + Li) / 2];
  34.         node left_root;
  35.         node right_root;
  36.         if (Ri == Li) {
  37.             return root;
  38.         }
  39.         if (Ri == Li + 1) { //Ri - root, Li - left_root
  40.             left_root = create_subtree(root.self, Li, Li);
  41.             root.l = left_root.self;
  42.             return root;
  43.         }
  44.         left_root = create_subtree(root.self, Li, (Ri + Li) / 2 - 1);
  45.         right_root = create_subtree(root.self, (Ri + Li) / 2 + 1, Ri);
  46.         root.l = left_root.self;
  47.         root.r = right_root.self;
  48.         return root;
  49.     }
  50.     void create(vector <int> a) {
  51.         arr = a;
  52.         if (a.size() == 0) {
  53.             return;
  54.         }
  55.         int len = a.size();
  56.         main_root = create_subtree(nullptr, 0, len - 1);
  57.         cout << "created\n";
  58.         return;
  59.     }
  60.     node find_first(node  v) {
  61.         res = v;
  62.         while (v.l != nullptr) {
  63.             res = v.l;
  64.         }
  65.         return res;
  66.     }
  67.     node find_next(node v) {
  68.         return;
  69.     }
  70.     void output() {
  71.  
  72.         return;
  73.     }
  74.     void insert_after(node v) { //а insert_defore надо?
  75.         return;
  76.     }
  77. };
  78.  
  79. int main() {
  80.     tree T;
  81.     vector <int> a = {1, 2, 3, 4, 5};
  82.     T.create(a);
  83.     T.output();
  84. }
  85.  
  86.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement