Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 BST를 최대 힙으로 변환

<시간/>

이 자습서에서는 이진 검색 트리를 최대 힙으로 변환하는 프로그램에 대해 설명합니다.

이를 위해 이진 검색 트리가 제공됩니다. 우리의 임무는 주어진 이진 탐색 트리를 최대 힙으로 변환하여 요소가 자신과 비교할 때 이진 탐색 트리의 조건을 따르도록 하는 것입니다.

예시

#include <bits/stdc++.h>
using namespace std;
//node structure of BST
struct Node {
   int data;
   Node *left, *right;
};
//node creation
struct Node* getNode(int data) {
   struct Node* newNode = new Node;
   newNode->data = data;
   newNode->left = newNode->right = NULL;
   return newNode;
}
//performing post order traversal
void postorderTraversal(Node*);
//moving in a sorted manner using inorder traversal
void inorderTraversal(Node* root, vector<int>& arr) {
   if (root == NULL)
      return;
   inorderTraversal(root->left, arr);
   arr.push_back(root->data);
   inorderTraversal(root->right, arr);
}
void convert_BSTHeap(Node* root, vector<int> arr, int* i){
   if (root == NULL)
      return;
   convert_BSTHeap(root->left, arr, i);
   convert_BSTHeap(root->right, arr, i);
   //copying data from array to node
   root->data = arr[++*i];
}
//converting to max heap
void convert_maxheap(Node* root) {
   vector<int> arr;
   int i = -1;
   inorderTraversal(root, arr);
   convert_BSTHeap(root, arr, &i);
}
//printing post order traversal
void postorderTraversal(Node* root) {
   if (!root)
      return;
   postorderTraversal(root->left);
   postorderTraversal(root->right);
   cout << root->data << " ";
}
int main() {
   struct Node* root = getNode(4);
   root->left = getNode(2);
   root->right = getNode(6);
   root->left->left = getNode(1);
   root->left->right = getNode(3);
   root->right->left = getNode(5);
   root->right->right = getNode(7);
   convert_maxheap(root);
   cout << "Postorder Traversal:" << endl;
   postorderTraversal(root);
   return 0;
}

출력

Postorder Traversal:
1 2 3 4 5 6 7