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; }