思路
应该是个很简单的题
给一棵树,让输出每层叶子节点的个数。
用一个结构体Node存储节点的children,然后从根节点开始遍历,遇到叶子节点,该层叶子节点数+1
代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
#define MAX 110
struct Node
{
int num;
int children[MAX];
}node[MAX];
int numbers[MAX];
int maxilayer = 0;
void getter(int n, int layer)
{
maxilayer = max(layer, maxilayer);
if(node[n].num==0)
{
numbers[layer]++;
}
for(int i=0;i<node[n].num;i++)
{
int child = node[n].children[i];
getter(child,layer+1);
}
}
int main()
{
int N,M;
scanf("%d%d",&N,&M);
for(int i=0;i<M;i++)
{
int a;
int k;
scanf("%d%d",&a,&k);
node[a].num = k;
for(int j=0;j<k;j++)
{
int b;
scanf("%d",&b);
node[a].children[j] = b;
}
}
bool flag = false;
getter(1,0);
for(int i=0;i<=maxilayer;i++)
{
if(flag)
printf(" ");
else flag = true;
printf("%d",numbers[i]);
}
printf("\n");
return 0;
}