C++のバイナリツリーで指定された2つのレベル間のすべてのノードを出力します
この問題では、バイナリツリーとツリー内の2つのレベル(上位と下位)が与えられ、ツリーの上位レベルと下位レベルの間のすべてのノードを印刷する必要があります。
二分木 は、各ノードに最大2つのノード(1つまたは2つ/なし)を持つ特別なツリーです。
問題を理解するために例を見てみましょう-
アッパー−1
低い− 3
出力 −
6 3 9 7 4 8 10
この問題を解決するには、ツリーのノードを特定のレベルで印刷する必要があります。 上部からのループを使用して再帰関数を呼び出します。 下へ ツリーのレベル。
このアルゴリズムは単純ですが、n 2 の次数がより複雑です。 。
より効果的な解決策は、順序どおりのトラバーサルを実行し、キューを使用することです。そして、指定された上位レベルと下位レベル内のノードを印刷します。
ソリューションを実装するためのプログラム-
例
#include <iostream> #include <queue> using namespace std; struct Node{ int key; struct Node* left, *right; }; void printNodesAtLevel(Node* root, int low, int high){ queue <Node *> Q; Node *marker = new Node; int level = 1; Q.push(root); Q.push(marker); while (Q.empty() == false){ Node *n = Q.front(); Q.pop(); if (n == marker){ cout << endl; level++; if (Q.empty() == true || level > high) break; Q.push(marker); continue; } if (level >= low) cout<<n->key<<" "; if (n->left != NULL) Q.push(n->left); if (n->right != NULL) Q.push(n->right); } } Node* insertNode(int key){ Node* temp = new Node; temp->key = key; temp->left = temp->right = NULL; return (temp); } int main() { struct Node *root = insertNode(6); root->left = insertNode(3); root->right = insertNode(9); root->left->left = insertNode(7); root->left->right = insertNode(4); root->left->right->left = insertNode(8); root->left->right->right = insertNode(10); root->left->right->right->left = insertNode(5); root->left->right->right->right = insertNode(1); root->left->right->left->left = insertNode(14); root->left->right->left->right = insertNode(26); int upper = 3; int lower = 1; cout << "Level wise Nodes between level "<<lower<<" and "<<upper<<" are \n"; printNodesAtLevel(root, lower, upper); return 0; }
出力
Level wise Nodes between level 1 and 3 are 6 3 9 7 4
-
C++プログラミングのバイナリツリー内の任意の2つのノード間のパスを出力します。
個別のノードのバイナリツリーと、バイナリツリー内のパスを出力するバイナリツリーの2つのノードが与えられます。 例 −ノード140から211の間のパスを出力して、その出力が次のようになるようにします- Output: 140->3->10->211 アイデアは、ルートノードから2つのノードへのパスを見つけて、それらを2つの別々のベクトルまたは配列(path1とpath2など)に格納することです。 ここで、2つの異なるケースが発生します- 2つのノードがルートノードの異なるサブツリーにある場合 − 2つのノードが、1つが左に、もう1つが右のように異なるサブツリーにあ
-
C++プログラミングのバイナリツリー内のすべてのノードの印刷レベル。
二分木が与えられた場合、タスクは、1からnまでのノードに格納されているすべてのキーに関連付けられたレベルを出力することです 上記のツリーでは、ノードは- 10 at level 1 3 and 211 at level 2 140, 162, 100 and 146 at level 3 キーが与えられると、プログラムはその特定のキーのレベルを出力する必要があります。 例 Input: 10 3 211 140 162 100 146 Output: level of 10 is 1 Level of 3 is 2 &