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 Level of 211 is 2 Level of 140 is 3 Level of 162 is 3 Level of 100 is 3 Level of 146 is 3
アルゴリズム
START Step 1 -> create a structure of a node as struct node struct node *left, *right int data End Step 2 -> function to create a node node* newnode(int data) node *temp = new node temp->data = data temp->left = temp->right= NULL return temp step 3 -> create function for finding levels of a node void levels(Node* root) IF root=NULL Return End Create STL queue<pair<struct Node*, int> >que que.push({root, 1}) create STL pair<struct Node*, int> par Loop While !que.empty() par = que.front() que.pop() print par.first->data and par.second IF par.first->left que.push({ par.first->left, par.second + 1 }) END IF par.first->right que.push({ par.first->right, par.second + 1 }) End End STOP
例
#include <bits/stdc++.h> using namespace std; //structure of a node struct Node{ int data; struct Node *left, *right; }; //it will print levels of a tree void levels(Node* root){ if (root==NULL) return; queue<pair<struct Node*, int> >que; que.push({root, 1}); pair<struct Node*, int> par; while (!que.empty()) { par = que.front(); que.pop(); cout << "Level of " << par.first->data << " is " << par.second << "\n"; if (par.first->left) que.push({ par.first->left, par.second + 1 }); if (par.first->right) que.push({ par.first->right, par.second + 1 }); } } //function to create nodes annd hence generate tree Node* newnode(int data){ Node* temp = new Node; temp->data = data; temp->left = temp->right = NULL; return temp; } int main(){ Node* root = NULL; //it will create a node root = newnode(34); root->left = newnode(12); root->right = newnode(50); root->left->left = newnode(11); root->left->right = newnode(54); levels(root); return 0; }
出力
上記のプログラムを実行すると、次の出力が生成されます
Level of 34 is 1 Level of 12 is 2 Level of 50 is 2 Level of 11 is 3 Level of 54 is 3
-
C++プログラミングのバイナリツリー内の任意の2つのノード間のパスを出力します。
個別のノードのバイナリツリーと、バイナリツリー内のパスを出力するバイナリツリーの2つのノードが与えられます。 例 −ノード140から211の間のパスを出力して、その出力が次のようになるようにします- Output: 140->3->10->211 アイデアは、ルートノードから2つのノードへのパスを見つけて、それらを2つの別々のベクトルまたは配列(path1とpath2など)に格納することです。 ここで、2つの異なるケースが発生します- 2つのノードがルートノードの異なるサブツリーにある場合 − 2つのノードが、1つが左に、もう1つが右のように異なるサブツリーにあ
-
C++プログラミングでツリーの奇数レベルにノードを出力します。
二分木が与えられた場合、プログラムはツリーの奇数レベルでノードを出力する必要があり、二分木のレベルは1からnまで始まります。 何も言及されていないので、2つのアプローチのいずれか、つまり再帰または反復を実装できます。 再帰的アプローチを使用しているため、プログラムは、奇数レベルのノードをフェッチして返す関数を再帰的に呼び出します。 上記の二分木で- Nodes at level 1: 10 Nodes at level 2: 3 and 211 Nodes at level 3: 140, 162, 100 and 146 したがって、レベル1とレベル3のノードが出力されます。