C ++
 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 preorder traversal
void preorderTraversal(Node*);
//storing values in sorted fashion
//with 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);
}
//converting BST to min heap
void convert_BSPheap(Node *root, vector<int> arr, int *i) {
   if (root == NULL)
      return;
   root->data = arr[++*i];
   convert_BSPheap(root->left, arr, i);
   convert_BSPheap(root->right, arr, i);
}
//converting to min heap
void convert_minheap(Node *root) {
   //vector storing the values of nodes
   vector<int> arr;
   int i = -1;
   //moving via inorder traversal
   inorderTraversal(root, arr);
   convert_BSPheap(root, arr, &i);
}
//performing preorder traversal
void preorderTraversal(Node *root) {
   if (!root)
    return;
   cout << root->data << " ";
   preorderTraversal(root->left);
   preorderTraversal(root->right);
}
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_minheap(root);
   cout << "Preorder Traversal:" << endl;
   preorderTraversal(root);
   return 0;
}

出力

Preorder Traversal:
1 2 3 4 5 6 7

  1. C ++の二項ヒープ?

    二項ヒープは、二分ヒープの拡張として定義され、二分ヒープによって提供される他の操作と一緒に、より高速なマージまたは結合操作を提供します。 二項ヒープは、二項ツリーのコレクションとして扱われます。 二項ツリーとは何ですか? 次数kの二項ツリーは、次数k-1の2つの二項ツリーを取得し、一方を左端の子またはその他として扱うことで構築できます。 次数kの二項ツリーには以下のプロパティがあります。 BinomialTreeのノード数は正確に2kです。 。 BinomialTreeの深さはkです。 深さiには正確にkCiノードがあります。ここでi=0、1 、。 。 。 、k。

  2. C++の最小ヒープの値x未満のすべてのノードを出力します

    この問題では、最小ヒープが与えられます および値x x未満のすべてのノードを印刷する必要があります。 最小ヒープ は、すべてのノードの値が子ノードのノード値よりも小さい特殊なタイプの二分木です。 問題を理解するために例を見てみましょう- X =45 出力- 2 4 7 10 17 22 33 34 ここで、この問題を解決するには、最小ヒープ全体のプレオーダートラバーサルを実行し、指定された値X未満の値のみを出力する必要があります。ノードの値がxより大きい場合、トラバースは行われません。そこの子ノードの値はxより大きくなります。最小ヒープのプレオーダートラバーサルを実行す