Advertisement
RaFiN_

Untitled

Sep 13th, 2021
1,217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.05 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define ll long long
  6.  
  7. const int mod = 1e9 + 7;
  8.  
  9. const int N = 5e5 + 10;
  10.  
  11. struct Node {
  12.     int value;
  13.     Node *left,*right;
  14.     Node(int val) {
  15.         this -> value = val;
  16.         this -> left = NULL;
  17.         this -> right = NULL;
  18.     }
  19. }*root;
  20.  
  21. vector<int> allNodes;
  22. vector<int> allNodesMinHeap;
  23.  
  24.  
  25. void getAllNodes(Node *curr) {
  26.     if (!curr) return ;
  27.     getAllNodes(curr -> left);
  28.     allNodes.push_back(curr -> value);
  29.     getAllNodes(curr -> right);
  30. }
  31.  
  32. void getAllNodesMinHeap(Node *curr) {
  33.     queue<Node *> qu;
  34.     qu.push(curr);
  35.     while(!qu.empty()) {
  36.         queue<Node *> quTmp;
  37.         while(!qu.empty()) {
  38.             Node *node = qu.front();
  39.             allNodesMinHeap.push_back(qu.front() -> value);
  40.             qu.pop();
  41.             if (node -> left && node -> right) {
  42.                 quTmp.push(node -> left);
  43.                 quTmp.push(node -> right);
  44.             }
  45.         }
  46.         qu = quTmp;
  47.     }
  48.  
  49.     for (auto it : allNodesMinHeap) cout << it << " ";
  50. }
  51. void convert_bst_to_min_heap(Node *curr) {
  52.     getAllNodes(curr);
  53.     queue<Node *> qu;
  54.     int indx = 0;
  55.     Node *min_heap = new Node(allNodes[indx]);
  56.     qu.push(min_heap);
  57.     while(!qu.empty()) {
  58.         queue<Node *> quTmp;
  59.         while(!qu.empty()) {
  60.             Node *node = qu.front();
  61.             qu.pop();
  62.             if (indx + 1 < allNodes.size()) {
  63.                 node -> left = new Node(allNodes[++indx]);
  64.                 quTmp.push(node -> left);
  65.                 node -> right = new Node(allNodes[++indx]);
  66.                 quTmp.push(node -> right);
  67.  
  68.             }
  69.         }
  70.         qu = quTmp;
  71.     }
  72.     getAllNodesMinHeap(min_heap);
  73. }
  74.  
  75.  
  76. int main() {
  77.  
  78.     root = new Node(5);
  79.  
  80.     root -> left = new Node(3);
  81.     root -> right = new Node(8);
  82.     root -> left -> left = new Node(2);
  83.     root -> left -> right = new Node(4);
  84.     root -> right -> left = new Node(6);
  85.     root -> right -> right = new Node(10);
  86.     convert_bst_to_min_heap(root);
  87.  
  88.     return 0;
  89. }
  90.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement