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つの要素(偶数)が含まれます。 さて、この問題を解決するために。各レベルでノードの数を見つけ、それに応じて偶数-奇数レベルを出力す