1004 Counting Leaves (30 分)——dfs遍历树
思路
这道题思路很简单,题目给出了一棵树,让求每一层的叶子结点数。那么我们用邻接表存树,dfs进行遍历,从根节点出发,走到叶子结点了,那么对应的层数d,ans[d]++.
AC代码
#include<bits/stdc++.h>
using namespace std;
const int N = 168;
vector<int> g[N];
int ans[N],mx;
//dfs遍历树
void dfs(int p,int d)
{
//取树的最大深度
mx=max(mx,d);
// 走到叶子结点了,那么此时的层数的叶子结点个数加1
if(g[p].size()==0)
{
ans[d]++;
return ;
}
for(int i=0; i<g[p].size(); ++i) dfs(g[p][i],d+1);
}
int main()
{
int n,m;
cin>>n>>m;
//利用邻接表存图模拟
for(int i=0; i<m; ++i)
{
int id,k;
cin>>id>>k;
for(int j=0; j<k; j++)
{
int son;
cin>>son;
g[id].push_back(son);
}
}
dfs(1,0);
for(int i=0; i<=mx; ++i)
{
printf("%d",ans[i]);
if(i!=mx) printf(" ");
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧