使用dfs,每搜索到一个叶子结点leaf[层数]++
,最后输出leaf数组即可
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
using namespace std;
//求每层叶子结点
int n, m;
// 0 < N < 100, the number of nodes in a tree
// M(< N), the number of non - leaf nodes
vector<int> v[100];
//tree
int leaf[100],maxH=0;
//每层叶结点,树最大高度
void dfs(int node,int level)
{
if ((int)v[node].size() == 0)
{
leaf[level]++;
maxH = level > maxH ? level : maxH;//记录最大高度
return;
}
for (int i = 0; i < (int)v[node].size(); i++)
dfs(v[node][i],level+1);
}
int main()
{
freopen("input.txt", "r", stdin);
scanf("%d %d", &n, &m);
for (int i = 0; i < m; i++)
{
int node, childNum;//结点 孩子数
scanf("%d %d", &node, &childNum);
for (int j = 0; j < childNum; j++)
{
int child;
scanf("%d", &child);
v[node].push_back(child);
}
}
dfs(1, 0);
printf("%d", leaf[0]);
for (int i = 1; i <= maxH; i++)
printf(" %d", leaf[i]);
return 0;
}