Title description
This question is to output how many leaf nodes there are in each layer. It can be done in two ways: DFS and BFS. ( Because I don’t practice related questions for a long time. Such a simple question can’t be done quickly. )
This question is a basic search question, which requires a lot of practice and review
DFS
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<vector<int>>tree(100);
int leaveNumOflLevel[100],maxlevel=-1;
int N,M;
void DFS(int v,int level){
maxlevel=max(level,maxlevel);
if(tree[v].empty()){
leaveNumOflLevel[level]++;
}
for(int i:tree[v]){
DFS(i,level+1);
}
}
int main(){
cin>>N>>M;
while(M--){
int id,k;
cin>>id>>k;
while(k--){
int iid;
cin>>iid;
tree[id].push_back(iid);
}
}
DFS(1,0);
for(int i=0;i<=maxlevel;i++)
{
if(i==0)
cout<<leaveNumOflLevel[i];
else
cout<<" "<<leaveNumOflLevel[i];
}
return 0;
}
BFS
#include<iostream>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
vector<vector<int>>tree(100);
int leaveNumOflLevel[100],level[100],maxlevel=-1;
int N,M;
void BFS(){
queue<int>q;
q.push(1);
while(!q.empty()){
int v=q.front();
q.pop();
maxlevel=max(level[v],maxlevel);
if(tree[v].empty()){
leaveNumOflLevel[level[v]]++;
}
for(int i:tree[v]){
level[i]=level[v]+1;
q.push(i);
}
}
}
int main(){
cin>>N>>M;
while(M--){
int id,k;
cin>>id>>k;
while(k--){
int iid;
cin>>iid;
tree[id].push_back(iid);
}
}
BFS();
for(int i=0;i<=maxlevel;i++)
{
if(i==0)
cout<<leaveNumOflLevel[i];
else
cout<<" "<<leaveNumOflLevel[i];
}
return 0;
}