题目要求:给出一颗树,统计该树每层叶子结点个数。
坑:输入格式不是顺序,子节点不一定能在输入时就知晓其父节点,需所有输入完成后,层序遍历时确定该结点所在层级。
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
int n, m;
struct Node{
int layer;
vector<int> children;
}node[110];
void BSF(int root){
queue<int> q;
q.push(root);
int l = node[root].layer;
int sum=0;
while(!q.empty()){
int cur = q.front();
q.pop();
//printf("当前访问的是: %d %d %d %d\n",cur,node[cur].children.size(),node[cur].layer,l);
if(node[cur].layer > l){
l++;
printf("%d ",sum);
sum = 0;
}
if(node[cur].children.size()!=0){
for(int i=0;i<node[cur].children.size();i++){
node[node[cur].children[i]].layer = node[cur].layer+1;
q.push(node[cur].children[i]);
}
}else{
sum++;
}
}
printf("%d\n",sum);
}
int main(){
scanf("%d%d",&n,&m);
node[1].layer = 1;
for(int i=1;i<m+1;i++){
int id, k;
scanf("%d%d",&id,&k);
for(int j=1;j<k+1;j++){
int child;
scanf("%d",&child);
node[id].children.push_back(child);
}
}
BSF(1);
}