Advertisement
hurmawe

декартовое дерево 1

Mar 5th, 2021
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. struct node
  2. {
  3.     int value_node  = NULL;
  4.     int key         = NULL;
  5.     node*   left    = nullptr;
  6.     node*   right   = nullptr;
  7.     node(int new_value)
  8.     {
  9.         value_node = new_value;
  10.         key = rand();
  11.     }
  12.    
  13. };
  14.  
  15. typedef pair<node*, node*> Pair;
  16.  
  17. node* merge(node* A, node* B) // соединение дерева
  18. {
  19.     if (!A) return B;
  20.     if (!B) return A;
  21.    
  22.     if (A->key > B->key)
  23.     {
  24.         A->right = merge(A->right, B);
  25.         return A;
  26.     }
  27.     else
  28.     {
  29.         B->left = merge(A,B->left);
  30.         return B;
  31.     }
  32. }
  33. Pair split(node* A,const int& x) // деление дерева
  34. {
  35.     if (!A) return { 0,0 };
  36.     if (A->value_node < x)
  37.     {
  38.         Pair q = split(A->right, x);
  39.         A->right = q.first;
  40.         return { A, q.second };
  41.     }
  42.     else
  43.     {
  44.        
  45.         Pair q = split(A->left, x);
  46.         A->left = q.second;
  47.         return { q.first, A };
  48.     }
  49. }
  50. node* insert(node* A, int x) // вставка элементов
  51. {
  52.     node* new_node = new node(x);
  53.     Pair q = split(A, x);
  54.     A = merge(q.first, merge(new_node, q.second));
  55.     return A;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement