C++の最小ヒープの値x未満のすべてのノードを出力します
この問題では、最小ヒープが与えられます および値x x未満のすべてのノードを印刷する必要があります。
最小ヒープ は、すべてのノードの値が子ノードのノード値よりも小さい特殊なタイプの二分木です。
問題を理解するために例を見てみましょう-
X =45
出力- 2 4 7 10 17 22 33 34
ここで、この問題を解決するには、最小ヒープ全体のプレオーダートラバーサルを実行し、指定された値X未満の値のみを出力する必要があります。ノードの値がxより大きい場合、トラバースは行われません。そこの子ノードの値はxより大きくなります。最小ヒープのプレオーダートラバーサルを実行するために再帰を使用します。
例
ソリューションの動作を説明するプログラム
#include <iostream>
using namespace std;
class MinHeap {
int* harr;
int capacity;
int heap_size;
public:
MinHeap(int capacity);
void Heapify(int);
int parent(int i) { return (i - 1) / 2; }
int left(int i) { return (2 * i + 1); }
int right(int i) { return (2 * i + 2); }
void insert(int k);
void printSmallerNodes(int k, int pos);
};
void MinHeap::printSmallerNodes(int x, int pos = 0){
if (pos >= heap_size)
return;
if (harr[pos] >= x) {
return;
}
cout<<harr[pos]<<" ";
printSmallerNodes(x, left(pos));
printSmallerNodes(x, right(pos));
}
MinHeap::MinHeap(int cap) {
heap_size = 0;
capacity = cap;
harr = new int[cap];
}
void MinHeap::insert(int k) {
if (heap_size == capacity) {
cout << "\nOverflow! Size Full\n";
return;
}
heap_size++;
int i = heap_size - 1;
harr[i] = k;
while (i != 0 && harr[parent(i)] > harr[i]) {
swap(harr[i], harr[parent(i)]);
i = parent(i);
}
}
void MinHeap::Heapify(int i) {
int l = left(i);
int r = right(i);
int smallest = i;
if (l < heap_size && harr[l] < harr[i])
smallest = l;
if (r < heap_size && harr[r] < harr[smallest])
smallest = r;
if (smallest != i) {
swap(harr[i], harr[smallest]);
Heapify(smallest);
}
}
int main() {
MinHeap h(50);
h.insert(2);
h.insert(4);
h.insert(7);
h.insert(34);
h.insert(52);
h.insert(33);
h.insert(10);
h.insert(51);
h.insert(75);
h.insert(17);
h.insert(22);
int x = 45;
cout<<"All nodes with value smaller than "<<x<<" are\n";
h.printSmallerNodes(x);
return 0;
} 出力
All nodes with a value smaller than 45 are 2 4 34 17 22 7 33 10
-
C++の最小ヒープの値x未満のすべてのノードを出力します
この問題では、最小ヒープが与えられます および値x x未満のすべてのノードを印刷する必要があります。 最小ヒープ は、すべてのノードの値が子ノードのノード値よりも小さい特殊なタイプの二分木です。 問題を理解するために例を見てみましょう- X =45 出力- 2 4 7 10 17 22 33 34 ここで、この問題を解決するには、最小ヒープ全体のプレオーダートラバーサルを実行し、指定された値X未満の値のみを出力する必要があります。ノードの値がxより大きい場合、トラバースは行われません。そこの子ノードの値はxより大きくなります。最小ヒープのプレオーダートラバーサルを実行す
-
C++で奇数と偶数のノードを含むすべてのレベルを出力します
この問題では、ツリーが与えられます。そして、偶数のノードと奇数のノードを含むすべてのレベルを印刷する必要があります。 概念をよりよく理解するために例を見てみましょう 出力- Levels with odd number of nodes: 1, 3, 4 Levels with even number of nodes: 2 説明 −第1レベルには1つの要素(奇数)、第2レベルには2つの要素(偶数)、第3レベルには3つの要素(奇数)、第4レベルには1つの要素(偶数)が含まれます。 さて、この問題を解決するために。各レベルでノードの数を見つけ、それに応じて偶数-奇数レベルを出力す