题意:构建树,判断每一层节点是否有叶节点,输出每一层叶节点的数目;
第一列:第一个数是节点的总数N,第二个数是无叶子点数目M;相当于输入多少行;
接下来输入M行,第一个是父节点,接下来是子节点数目K,后面是子节点数;
第一点,需要注意定义全局变量,会自动初始化;
第二点,深度的叠加需要加在广度优先中;
第三点,vector声明大小后,可以直接用下标读入数据;
第四点,最后输入空格,可以使用if判断,满足要求;
在这里插入代码片
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
int layer[101],max_depth=1;
struct Tree{
vector<int> s;
int depth=1;
}node[100];
void BFS(int root){
queue<Tree>q;
q.push(node[root]);
while(!q.empty()){
Tree top = q.front();
q.pop();
max_depth=max(max_depth,top.depth);
if(top.s.empty()) layer[top.depth]++;
for(int i = 0; i < top.s.size(); i++){
node[top.s[i]].depth=top.depth+1;
q.push(node[top.s[i]]);
}
}
}
int main(){
int id_num,M,root,K;
scanf("%d %d",&id_num,&M);
for(int i = 0; i < M; i++){
scanf("%d %d",&root,&K);
node[root].s.resize(K);
for(int j = 0; j < K;j++) scanf("%d",&node[root].s[j]);
}
BFS(1);
for(int i = 1; i <= max_depth; i++){
if(i!=1)printf(" ");
printf("%d",layer[i]);
}
}```