题目
题目描述
输出一个树,每一层的叶子结点数
分析
用深度优先搜索遍历整棵树,直至一个结点没有叶子结点,则这一层的叶子节点数book[i]++;注意还要记录树的深度。
代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> v[100];
int book[100];
int maxDepth=-1;
void dfs(int index,int depth){
// 此时第index结点已经没有子结点了,则表明是叶子结点
if(v[index].size()==0){
// 统计该叶子结点
book[depth]++;
// 更新最大层次
maxDepth = max(maxDepth,depth);
return ;
}
// 递归调用
for(int i=0;i<v[index].size();i++){
dfs(v[index].at(i),depth+1);
}
}
int main(){
int N,M;
int node,K;
while(cin>>N>>M){
for(int i=0;i<M;i++){
cin>>node>>K;
for(int j=0;j<K;j++){
int temp;
cin>>temp;
v[node].push_back(temp);
}
}
// 从第一个结点开始,第零层
dfs(1,0);
cout<<book[0];
for(int i=1;i<=maxDepth;i++){
cout<<" "<<book[i];
}
}
return 0;
}