PAT1004

题目大意

给定一棵树,输出树的每一层叶子节点个数。

输入格式

第一行为N(0<N<100)-总节点个数,M(<N)-非叶节点个数。

后M行格式为ID K ID[1] ID[2] ... ID[K],id为非叶节点号,k为此节点具有的孩子节点个数,k后面为其孩子节点编号。

输出格式

输出为树的每一层叶子节点的个数,一行输出,空格隔开,行末无空格。

样例输入

2 1
01 1 02

样例输出

0 1

解题思路

此题考察点为dfs。

将每个节点的孩子节点编号存于vector,遍历每个非叶子节点,若此节点的vector为空,则为叶子节点,记录所在层数,将记录此层数的叶子节点数组数值增一。

全部代码

 1 #include <iostream>
 2 #include <vector>
 3 #include <algorithm>
 4 using namespace std;
 5 
 6 vector<int> v[100];
 7 int maxlevel = 0;
 8 int num[100] = { 0 };
 9 void dfs(int index, int level)
10 {
11     if (v[index].size() == 0) {
12         maxlevel = max(maxlevel, level);
13         num[level]++;
14         return;
15     }
16     for (int i = 0; i < v[index].size(); i++)
17         dfs(v[index][i], level + 1);
18 }
19 int main()
20 {
21     int n, m;
22     cin >> n;
23     if (n == 0) return 0;
24     cin >> m;
25     for (int i = 0; i < m; i++) {
26         int a, b;
27         cin >> a >> b;
28         for (int j = 0; j < b; j++) {
29             int t;
30             cin >> t;
31             v[a].push_back(t);
32         }
33     }
34     dfs(1, 0);
35     for (int i = 0; i <= maxlevel; i++) {
36         if (i == 0) cout << num[i];
37         else cout << ' ' << num[i];
38     }
39 }

 

转载于:https://www.cnblogs.com/komorabi/p/11224531.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值