C++のn-aryツリーの偶数サイズのサブツリー
この問題では、n-aryツリーを示す隣接リストが与えられます。私たちのタスクは、n-aryツリー内の偶数サイズのサブツリーの数を見つけることです。
N-aryツリー は、通常、次のように階層的に表されるノードのコレクションとして定義されます。
ツリーはルートノードで開始されます。
ツリーの各ノードは、その子ノードへのポインタのリストを維持します。
子ノードの数がm以下です。
問題を理解するために例を見てみましょう
入力:
出力: 4
説明:
7をルートとするツリーのサイズは同じです。
2をルートとするツリーのサイズは同じです。
0をルートとするツリーは、サイズが均等です。
3をルートとするツリーのサイズは同じです。
ソリューションアプローチ-
単純なアプローチは、evenTreeCountを増やしても、特定のノードのすべての子ノードをカウントすることです。このために、DFSを使用して、指定されたノードのサブツリーの長さを見つけます。
これは、ツリー上の単一のトラバーサルを使用して実行できます。 各子ノードのサブツリーのサイズを再帰的に見つけてサイズを確認し、偶数の場合はevenTreeCountを増やし、それ以外の場合はそのままにします。
ソリューションの動作を説明するプログラム
例
#include <bits/stdc++.h> using namespace std; int countEventSizeSubTree(vector<int> adj[], int n, int v, int& EvenCount){ int size = 1; for (auto ele : adj[v]) { size += countEventSizeSubTree(adj, n, ele, EvenCount); } if (size % 2 == 0) EvenCount++; return size; } int main(){ int n; n = 10; vector<int> adj[n + 1]; adj[7].push_back(2); adj[7].push_back(9); adj[2].push_back(0); adj[2].push_back(1); adj[9].push_back(3); adj[3].push_back(8); adj[0].push_back(5); int EvenCount = 0; countEventSizeSubTree(adj, n, 1, EvenCount); cout<<"Even Size SubTree are "<<EvenCount; return 0; }
出力-
Even Size SubTree are 0
-
C++での再帰なしのN-aryツリーのプレオーダートラバーサル
この問題では、N-aryツリーが与えられます。私たちのタスクは、ツリーのプレオーダートラバーサルを印刷することです。 まず、いくつかの基本的な用語を学びましょう。 N-aryツリー は、すべてのノードが最大N個の子ノードを持つことができるツリーです。例2-ary(バイナリ)ツリーには最大2つの子ノードがあります。 プレオーダートラバーサル ツリーのノードをトラバースする方法です。ここでは、最初にルートノードをトラバースし、次に左の子、次に右の子をトラバースします。 私たちの問題を理解するために例を見てみましょう Preorder traversal : 1215149941171
-
二分木がC++の別の二分木のサブツリーであるかどうかを確認します
2つの二分木があるとします。小さい方のツリーが別の二分木のサブツリーであるかどうかを確認する必要があります。これらの2本の木が与えられていると考えてください。 2本の木があります。 2番目のツリーは、最初のツリーのサブツリーです。このプロパティを確認するために、ポストオーダー方式でツリーをトラバースします。このノードをルートとするサブツリーが2番目のツリーと同一である場合、それはサブツリーです。 例 #include <bits/stdc++.h> using namespace std; class node { public: &