题目描述
此题是输出每层有多少个叶子节点,可以采用DFS和BFS两种方法进行(由于长时间不练习相关题目。这么简单的题也不能很快做出来,菜 )
此题是搜索基础题,需要多多练习,多多回顾
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;
}