题目:PAT- 1004 Counting Leaves (30 分)
原题链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805521431773184
解题思路:
本题考查树的深度优先遍历和广度优先遍历,此题用广度优先遍历解决,遍历过程中判断节点是否为叶子节点。
解题代码:
#include <iostream>
#include <vector>
#include <deque>
using namespace std;
vector <vector<int> > v;
int level[110];
int maxlev = -1;
void dfs(int id, int lev){
maxlev = max(maxlev, lev);
if (!v[id].size()) level[lev]++;
for (int i = 0; i < v[id].size(); i++){
dfs(v[id][i], lev + 1);
}
}
int main(){
int n, m;
cin >> n >> m;
v.resize(n+1);
for (int i = 0; i < m; i++){
int id, k;
cin >> id >> k;
v[id].resize(k);
for (int j = 0; j < k; j++){
cin >> v[id][j];
}
}
dfs(1, 0);
for (int i = 0; i <= maxlev; i++){
if(!i) printf("%d", level[i]);
else printf(" %d", level[i]);
}
return 0;
}
博客围绕PAT-1004题展开,给出原题链接。解题思路是考查树的深度优先和广度优先遍历,采用广度优先遍历,在遍历中判断节点是否为叶子节点,还给出了解题代码。
444

被折叠的 条评论
为什么被折叠?



