PAT甲级1004 Counting Leaves (30分):[C++题解]树、邻接表存储树、dfs遍历树
文章目录
- 题目分析
- 题目链接
题目分析
题意重述:一棵树,求每一层的叶子节点数目。
分析 构造树,使用邻接表来存(相当于存储有向图)。
需要一个头结点数组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遍历树相关推荐
- PAT甲级1049 Counting Ones (30 分):[C++题解]统计1的个数、数位统计
文章目录 题目分析 题目链接 题目分析 来源:PAT网站 分析: 以数字abcdefg这个7位数字为例,说一下本题的思路. 1)数字1在每一位出现的次数. 2)以第d位为例,第d位的取值可以分为3种情 ...
- 【两种解法】1004 Counting Leaves (30 分)_27行代码AC
立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 A family hierarchy is usually presented by a pedigree tree. Your ...
- 1004 Counting Leaves (30分) (vector实现)
题解: 用vector邻接表建图,两个邻接表实现层序遍历. 有注释在代码 代码: /*Keep on going Never give up*/ #pragma GCC optimize(3,&quo ...
- 1004 Counting Leaves (30 分)【难度: 中 / 知识点: 树的遍历】
题目意思: 求每一层的叶子结点数 方法一: 深搜 数组模拟存储邻接表 #include<bits/stdc++.h> using namespace std; const int N=1e ...
- PAT甲级1072 Gas Station (30 分):[C++题解]dijkstra算法、最短路
文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 所有的dist[ ]都≤Ds:最小的dist[ ]最大; dist[ ] 总和最大. 由于加油站是字符,为了简单起见,将m个加油站编 ...
- PAT甲级1155 Heap Paths (30 分):[C++题解]堆、堆的遍历、树的遍历、dfs输出路径、完全二叉树建树
文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 堆首先是完全二叉树,所以先建完全二叉树,由于给定的是层序遍历的数据,所以直接用数组即可,注意数组下标从1开始,这样便满足结点u和左儿 ...
- PAT甲级1107 Social Clusters (30 分):[C++题解]并查集,爱好、人数
文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 凭爱好,分人群.注意点:爱好可传递.什么意思?意思是A和B的有共同爱好1, B和C有共同爱好2,那么认为A和C也是同一群人. 按照爱 ...
- PAT甲级1103 Integer Factorization (30 分):[C++题解]背包问题,DP解法
文章目录 题目分析 题目链接 题目分析 分析 把N(样例中N=169)看成背包的体积:把k(样例中k=5)看成背包能承的重量.把这道题转化为二维完全背包问题.由于数据范围给出的次幂P∈[2,7],那么 ...
- PAT甲级1139 First Contact (30 分):[C++题解] 图论、暴力枚举两个点、hash映射
文章目录 题目分析 题目链接 题目分析 来源:acwing 题目分析: 图论模拟题. 给定暗恋的两个人A 和B,需要寻找一对C 和D ,满足:A和C是朋友,C和D是朋友,D和B是朋友.而且A.C同性别 ...
最新文章
- python求偶奇数和差编程_选择最大奇数Python
- 复制MySQL实时_自制mysql主从复制(实时)软件——实现
- reactjs中的事件处理
- 谷歌浏览器的驱动下载安装与配置-0223
- Debian Gnu/Linux 9 安装remmina软件过程记录
- 瑞银报告:Waymo在2030年占据全球60%无人出租车市场
- Swift:带有私有设置方法的公有属性
- Python之package、module
- 【linux】如何查看和解压缩rpm文件内容
- python csv写入 不以科学计数法_【Python与GIS】聊聊Python与数据——上(三)
- java 验证码_如何用java实现验证码?
- 扫描仪 无线 打印服务器,树莓派搭建网络打印机 扫描仪服务器
- 经典贪心算法问题:会议安排
- 【C语言】- 关机小程序
- 基于AMSR-E和AMSR2数据的全球长时序日尺度土壤水分数据集(2002-2022)
- 数据驱动「付费转化」的3个思路
- 【Adrealm智库专栏】激励机制——区块链的核心
- js中 ‘ ‘==0 为什么等于true?
- 彻底掌握 Javascript(九)数组【讲师辅导】-曾亮-专题视频课程
- 优麒麟 配置java_优麒麟中安装虚拟机(ARM64)
热门文章
- 浅谈runtime运行时机制
- [C++]const 总结
- 引路蜂地图API:Drawing包定义
- [转]SAP FI/CO 模块设置
- [NLP]--NLP programming tutorial
- pythontxt文件怎么读_python怎么读txt文件
- ssr无法在win10使用_Nuxt SSR中使用WangEditor爬坑—把对象暴打出原型
- 【Arduino】HX711 拉力计称重模块 两个模块同时使用
- 1.9 GRU 单元-深度学习第五课《序列模型》-Stanford吴恩达教授
- 2.14 向量化 Logistic 回归的梯度输出-深度学习-Stanford吴恩达教授