C++ 中 N 叉樹的偶數大小子樹
在這個問題中,我們得到一個鄰接表,它表示一個 N 叉樹。我們的任務是找到 *N 叉樹中偶數大小子樹的數量*。
N 叉樹 **通常定義為節點的集合,通常以以下方式分層表示。**
樹從根節點開始。
樹的每個節點都維護一個指向其子節點的指標列表。
子節點的數量小於或等於 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
廣告