文章目录

  • 题目分析
  • 题目链接

题目分析

题意重述:一棵树,求每一层的叶子节点数目。

分析 构造树,使用邻接表来存(相当于存储有向图)。

需要一个头结点数组h[N],然后每个头节点往外形成一个单链表e[],ne[];(用数组模拟)单链表中用来存该结点的孩子结点,用cnt[N]数组来记录每一层的叶子结点数。

使用深度优先遍历dfs来求每一层的叶子节点数,由于是邻接表式的存储,头结点数组中某结点值是-1,表示是叶子结点,这也就是dfs的退出的条件,此时如何退出呢? 需要将该叶子结点所在层数的叶子数++,然后记得更新树的最大深度。

然后深度遍历该结点的孩子结点。

ac代码

#include<bits/stdc++.h>
using namespace std;const int N=110;
int n,m;
//用邻接表来存
int h[N], e[N],ne[N], idx; //idx默认初始化为0int cnt[N] ;// 每一层的叶子结点数int max_depth; //树的最大层数void add(int a, int b){ //使用头结点a的链表 h[a]//在a这个单链表内,插入结点b(头插法)//表示a有一个儿子b//e[ ] 存的是结点号b//ne [ ] 中存的是下一个结点序号idx,不是结点号e[idx] =b,ne[idx] =h[a],h[a]=idx++;//cout<< a<<' '<<b<<endl;
}void dfs(int u, int depth){if(h[u]==-1){ //说明u是叶子结点cnt[depth]++;//depth这一层的计数++max_depth=max(max_depth,depth);return;}//遍历头结点u对应的单链表h[u]for(int i =h[u]; i!=-1; i=ne[i]){dfs(e[i],depth+1);//}}int main(){cin>> n>> m;memset(h ,-1,sizeof h);for(int i=0;i<m;i++){int id ,k;cin>> id >> k;while(k--){int son;cin>>son;add(id , son);//构造邻接表}}dfs(1,0);  //结点号,层数cout<<cnt[0];for(int i=1;i<=max_depth;i++) cout<<" "<<cnt[i];}  

题目链接

PAT甲级1004 Counting Leaves (30分)

PAT甲级1004 Counting Leaves (30分):[C++题解]树、邻接表存储树、dfs遍历树相关推荐

  1. PAT甲级1049 Counting Ones (30 分):[C++题解]统计1的个数、数位统计

    文章目录 题目分析 题目链接 题目分析 来源:PAT网站 分析: 以数字abcdefg这个7位数字为例,说一下本题的思路. 1)数字1在每一位出现的次数. 2)以第d位为例,第d位的取值可以分为3种情 ...

  2. 【两种解法】1004 Counting Leaves (30 分)_27行代码AC

    立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 A family hierarchy is usually presented by a pedigree tree. Your ...

  3. 1004 Counting Leaves (30分) (vector实现)

    题解: 用vector邻接表建图,两个邻接表实现层序遍历. 有注释在代码 代码: /*Keep on going Never give up*/ #pragma GCC optimize(3,&quo ...

  4. 1004 Counting Leaves (30 分)【难度: 中 / 知识点: 树的遍历】

    题目意思: 求每一层的叶子结点数 方法一: 深搜 数组模拟存储邻接表 #include<bits/stdc++.h> using namespace std; const int N=1e ...

  5. PAT甲级1072 Gas Station (30 分):[C++题解]dijkstra算法、最短路

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 所有的dist[ ]都≤Ds:最小的dist[ ]最大; dist[ ] 总和最大. 由于加油站是字符,为了简单起见,将m个加油站编 ...

  6. PAT甲级1155 Heap Paths (30 分):[C++题解]堆、堆的遍历、树的遍历、dfs输出路径、完全二叉树建树

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 堆首先是完全二叉树,所以先建完全二叉树,由于给定的是层序遍历的数据,所以直接用数组即可,注意数组下标从1开始,这样便满足结点u和左儿 ...

  7. PAT甲级1107 Social Clusters (30 分):[C++题解]并查集,爱好、人数

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 凭爱好,分人群.注意点:爱好可传递.什么意思?意思是A和B的有共同爱好1, B和C有共同爱好2,那么认为A和C也是同一群人. 按照爱 ...

  8. PAT甲级1103 Integer Factorization (30 分):[C++题解]背包问题,DP解法

    文章目录 题目分析 题目链接 题目分析 分析 把N(样例中N=169)看成背包的体积:把k(样例中k=5)看成背包能承的重量.把这道题转化为二维完全背包问题.由于数据范围给出的次幂P∈[2,7],那么 ...

  9. PAT甲级1139 First Contact (30 分):[C++题解] 图论、暴力枚举两个点、hash映射

    文章目录 题目分析 题目链接 题目分析 来源:acwing 题目分析: 图论模拟题. 给定暗恋的两个人A 和B,需要寻找一对C 和D ,满足:A和C是朋友,C和D是朋友,D和B是朋友.而且A.C同性别 ...

最新文章

  1. python求偶奇数和差编程_选择最大奇数Python
  2. 复制MySQL实时_自制mysql主从复制(实时)软件——实现
  3. reactjs中的事件处理
  4. 谷歌浏览器的驱动下载安装与配置-0223
  5. Debian Gnu/Linux 9 安装remmina软件过程记录
  6. 瑞银报告:Waymo在2030年占据全球60%无人出租车市场
  7. Swift:带有私有设置方法的公有属性
  8. Python之package、module
  9. 【linux】如何查看和解压缩rpm文件内容
  10. python csv写入 不以科学计数法_【Python与GIS】聊聊Python与数据——上(三)
  11. java 验证码_如何用java实现验证码?
  12. 扫描仪 无线 打印服务器,树莓派搭建网络打印机 扫描仪服务器
  13. 经典贪心算法问题:会议安排
  14. 【C语言】- 关机小程序
  15. 基于AMSR-E和AMSR2数据的全球长时序日尺度土壤水分数据集(2002-2022)
  16. 数据驱动「付费转化」的3个思路
  17. 【Adrealm智库专栏】激励机制——区块链的核心
  18. js中 ‘ ‘==0 为什么等于true?
  19. 彻底掌握 Javascript(九)数组【讲师辅导】-曾亮-专题视频课程
  20. 优麒麟 配置java_优麒麟中安装虚拟机(ARM64)

热门文章

  1. 浅谈runtime运行时机制
  2. [C++]const 总结
  3. 引路蜂地图API:Drawing包定义
  4. [转]SAP FI/CO 模块设置
  5. [NLP]--NLP programming tutorial
  6. pythontxt文件怎么读_python怎么读txt文件
  7. ssr无法在win10使用_Nuxt SSR中使用WangEditor爬坑—把对象暴打出原型
  8. 【Arduino】HX711 拉力计称重模块 两个模块同时使用
  9. 1.9 GRU 单元-深度学习第五课《序列模型》-Stanford吴恩达教授
  10. 2.14 向量化 Logistic 回归的梯度输出-深度学习-Stanford吴恩达教授