题目链接:
https://pintia.cn/problem-sets/994805342720868352/problems/994805521431773184
题目大意:
树的遍历,输出每层叶子节点的数目。采用深度优先算法。
参考代码:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 110;
vector<int> T[N]; //二维可变长数组
int leaf[N] = {0}; //记录该层的叶子节点
int Max_h = 1;
void DFS(int index, int h){ //深度优先遍历
Max_h=max(Max_h, h);
if(T[index].size()==0){
leaf[h]++;
return;
}
for(int i=0; i < T[index].size(); i++)
DFS(T[index][i], h+1);
}
int main()
{
int n, m, parent, child, k;
cin >> n >> m ;
for(int i = 0; i < m; i++){
cin >> parent >> k;
for( int j = 0; j < k; j++){
cin >> child;
T[parent].push_back(child);
}
}
DFS(1,1);
cout << leaf[1] ;
for(int i = 2; i <= Max_h; i++){
cout << ' ' << leaf[i] ;
}
return 0;
}