C++でDFSを使用してn-aryツリーのすべてのリーフノードを出力します
この問題では、n-aryのエッジを含む2次元配列が与えられます。ここで、edgeはn-aryツリーのエッジを定義します。作成したa-aryツリーのすべてのリーフノードを印刷する必要があります。
n-aryツリー は最大n個の子を持つツリーです。つまり、ノードは1、2、...n個の子ノードを持つことができます。
問題を理解するための例を見てみましょう-
Input: edge[][] = {{5,8}, {5,6}, {8,1}, {8,4}, {6,7}} Output: 1 4 7>
説明 −エッジ配列を使用してツリーを作成しましょう−
このツリーのリーフノードは1、4、7です。
この問題を解決するために、DFSを使用してツリーをトラバースします(すべてのサブツリーのリーフノードが検出されます)。また、アレイの訪問済みノードがマークされます。ノードに子がある場合(リーフノードでない場合)、値にフラグを付け、子ノードのないノードを出力します。
例
このプログラムは、私たちのソリューションの実装を示しています-
#include <bits/stdc++.h> using namespace std; void DFS(list<int> t[], int node, int parent) { int flag = 0; for (auto ir : t[node]) { if (ir != parent) { flag = 1; DFS(t, ir, node); } } if (flag == 0) cout<<node<<"\t"; } int main() { list<int> t[1005]; pair<int, int> edges[] = { { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 5 }, { 3, 6 }, { 3, 7 }, { 6, 8 } }; int cnt = sizeof(edges) / sizeof(edges[0]); int node = cnt + 1; for (int i = 0; i < cnt; i++) { t[edges[i].first].push_back(edges[i].second); t[edges[i].second].push_back(edges[i].first); } cout<<"Leaf nodes of the tree are:\n"; DFS(t, 1, 0); return 0; }
出力
Leaf nodes of the tree are − 4 5 8 7
-
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 &
-
C ++の1つのスタックを使用して、リーフノードを左から右にバイナリツリーで印刷します。
プログラムは、バイナリツリーのリーフノードを左から右に出力する必要がありますが、課題は1つのスタックのみを使用することです push()関数を使用してバイナリツリーのノードを挿入し、pop()操作を使用してリーフノードを表示します。 リーフノードは、左右のポインタがNULLであるエンドノードです。これは、特定のノードが親ノードではないことを意味します。 例 Input : 12 21 32 41 59 33 70 Output : 41 59 33 70 スタックはLIFO構造であるデータ構造であり、トップポインターが最後に挿入された要素を指すため、リーフノードは最後にスタックに挿