1. 程式人生 > >pat -1004(樹的遍歷)

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