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: &