pat -1004(树的遍历)

题目链接: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[120];
int maxlevel,n,vis[120];
void dfs(int x,int level)
{
    if(vc[x].size()==0)
    {
        maxlevel=maxlevel>level?maxlevel:level;
        vis[level]++;
        return ;
    }
    for(int i=0;i<vc[x].size();i++)
    {
        dfs(vc[x][i],level+1);
    }
}
int main(void)
{
    int n,i,j,m,k,id,y;
    cin>>n;
    if(n==0) return 0;
    cin>>m;
    for(i=0;i<m;i++)
    {
        cin>>id>>k;
        for(j=0;j<k;j++)
        cin>>y,vc[id].push_back(y);
    }
    memset(vis,0,sizeof(vis));
    maxlevel=0;
    dfs(1,0);
    for(i=0;i<=maxlevel;i++)
    {
        if(i) printf(" ");
        printf("%d",vis[i]);
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/2018zxy/p/10065189.html