pat -1004(树的遍历)

时间:2025-04-20 22:34:07

题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805521431773184

思路:

(1)用vector记录每个非叶子节点的子节点

(2)通过dfs记录每一层的节点的个数,并记录最高层的节点数量

(3)从0开始,遍历每一层。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
vector <int> vc[];
int maxlevel,n,vis[];
void dfs(int x,int level)
{
if(vc[x].size()==)
{
maxlevel=maxlevel>level?maxlevel:level;
vis[level]++;
return ;
}
for(int i=;i<vc[x].size();i++)
{
dfs(vc[x][i],level+);
}
}
int main(void)
{
int n,i,j,m,k,id,y;
cin>>n;
if(n==) return ;
cin>>m;
for(i=;i<m;i++)
{
cin>>id>>k;
for(j=;j<k;j++)
cin>>y,vc[id].push_back(y);
}
memset(vis,,sizeof(vis));
maxlevel=;
dfs(,);
for(i=;i<=maxlevel;i++)
{
if(i) printf(" ");
printf("%d",vis[i]);
}
return ;
}