C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++のバイナリツリーで指定された2つのレベル間のすべてのノードを出力します


この問題では、バイナリツリーとツリー内の2つのレベル(上位と下位)が与えられ、ツリーの上位レベルと下位レベルの間のすべてのノードを印刷する必要があります。

二分木 は、各ノードに最大2つのノード(1つまたは2つ/なし)を持つ特別なツリーです。

問題を理解するために例を見てみましょう-

C++のバイナリツリーで指定された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

  1. C++プログラミングのバイナリツリー内の任意の2つのノード間のパスを出力します。

    個別のノードのバイナリツリーと、バイナリツリー内のパスを出力するバイナリツリーの2つのノードが与えられます。 例 −ノード140から211の間のパスを出力して、その出力が次のようになるようにします- Output: 140->3->10->211 アイデアは、ルートノードから2つのノードへのパスを見つけて、それらを2つの別々のベクトルまたは配列(path1とpath2など)に格納することです。 ここで、2つの異なるケースが発生します- 2つのノードがルートノードの異なるサブツリーにある場合 − 2つのノードが、1つが左に、もう1つが右のように異なるサブツリーにあ

  2. 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   &