PAT 甲级题目讲解:1004《Counting Leaves》
摘要本文详细讲解 PAT 甲级 1004 题Counting Leaves的解题方法。题目要求从给定的族谱树中逐层统计叶子节点数量核心思路为邻接表建树 BFS 层序遍历每层记录无孩子节点的个数。文章涵盖题目分析、样例解析、完整代码及常见错误提醒并总结时间/空间复杂度均为O(n)\mathcal{O}(n)O(n)最后给出了思维拓展方向。✅ PAT 甲级题目讲解1004《Counting Leaves》 题目简介本题要求从给定的族谱树结构中逐层统计每一层中没有孩子的节点即叶子节点个数并按照层级从上到下输出。题目中树的根节点固定为编号01输入采用非叶子节点及其所有子节点编号的形式最终输出从根节点出发每一层的叶子节点数按层次顺序打印。 样例分析输入2 1 01 1 02解释有两个节点非叶子节点有一个即01它有一个孩子02根节点01属于第 1 层但它是非叶节点节点02没有孩子是第 2 层的叶子节点。输出0 1表示第 1 层没有叶子节点第 2 层有 1 个叶子节点。 解题思路整体思路本题可以建树后使用广度优先搜索BFS从根节点开始一层层向下遍历。每一层中如果某个节点没有孩子则为叶子结点在当前层计数。 变量说明变量名含义n总结点数m非叶节点数量cnt[i]节点i的孩子数量t[i][j]节点i的第j个孩子编号s[k]第k层的叶子节点数k层数总数用于最终输出✅ Step 1建树结构使用邻接表 建树思路输入中每一行表示一个非叶子节点及其所有孩子使用二维数组t[i][j]存储节点i的第j个孩子编号另设数组cnt[i]存储每个节点的孩子个数则要遍历一棵树所有孩子可以用for(inti1;icnt[p];i){// p 有 cnt[p] 个孩子intcdt[p][i];// cd: 结点 p 的第 i 个孩子编号}根节点编号固定为01可直接以整数1表示。输入时用二维数组建树scanf(%d %d,n,m);while(m--){intf,k,c;scanf(%d %d,f,k);while(k--){scanf(%d,c);t[f][cnt[f]]c;// 记录孩子节点编号}}✅ Step 2层序遍历统计每层叶子数使用队列queueint按层推进每一层开始时记录当前队列大小size代表该层节点数逐层遍历队列中现有结点每次从队首弹出节点p判断其是否为叶子cnt[p] 0若是则s[k]将p的所有孩子依次入队每层处理结束后层数k最后一次循环后队列为空但k多加了一次因此需k--纠正。voidbfs(intx){queueintq;q.push(x);k1;// 初始化第一层为 1while(!q.empty()){intdq.size();// 当前层节点个数for(inti1;id;i){intpq.front();q.pop();if(!cnt[p])s[k];// 没有孩子就是叶子节点for(inti1;icnt[p];i){intcdt[p][i];q.push(cd);}}k;// 进入下一层}k--;// 减去最后多加的一层}✅ 完整代码#includebits/stdc.husingnamespacestd;intn,m,cnt[105],t[105][105],k,s[105];voidbfs(intx){queueintq;q.push(x);k1;// 初始化第一层while(!q.empty()){intdq.size();// 当前层的结点数for(inti1;id;i){intpq.front();q.pop();if(!cnt[p])s[k];// 当前为叶子节点for(inti1;icnt[p];i){intcdt[p][i];// 当前 p 的一个孩子q.push(cd);// 孩子入队}}k;// 层数加 1}k--;// 减去最后空的那层}intmain(){scanf(%d %d,n,m);while(m--){intf,k,c;scanf(%d %d,f,k);while(k--){scanf(%d,c);t[f][cnt[f]]c;// 建边}}bfs(1);// 从根节点 1 开始 BFSfor(inti1;ik;i){printf(%d,s[i]);if(ik)printf( );}return0;} 常见错误提醒错误类型表现描述忘记减去最后空层BFS 最后一层已空但仍加了k导致多输出一层queue 大小变化误用q.size()在for内部使用q.size()会因push()改变队列大小造成统计错误没有判断叶子节点忘记if(!cnt[p])会导致漏计✅ 总结归纳本题重点是树的建模 层序遍历熟练掌握使用数组模拟邻接表的方法每轮处理固定数量节点再推进一层注意边界处理和输出格式控制。时间复杂度建树O(n)\mathcal{O}(n)O(n)BFS 遍历O(n)\mathcal{O}(n)O(n)空间复杂度O(n)\mathcal{O}(n)O(n) 思维拓展若题目改为输出每层所有结点编号可在 BFS 中使用depth[]记录每个结点层数类似模型常见于 公司管理结构、操作系统树状调度、层级打印可视化 等问题进一步练习可尝试输出树的最大深度、树的直径、从叶子反向建树等变形题。

相关新闻

PAT 甲级题目讲解:1006《Sign In and Sign Out》

PAT 甲级题目讲解:1006《Sign In and Sign Out》

摘要:本题需判断给定人员中的最早签到者(解锁者)与最晚签出者(锁门者)。解题关键是将时间统一转换为“当日秒数”以方便比较,思路简洁高效,适合练习时间格式解析与比较最值。✅ PAT 甲级题目讲解…

2026/7/4 8:48:50阅读更多 →
计算机毕业设计之基于SSM的手机销售管理系统的设计与实现

计算机毕业设计之基于SSM的手机销售管理系统的设计与实现

随着手机销售的推进,该系统成为促进手机销售发展的重要工具。为此开发了手机销售管理系统,以满足该用户的需求。本研究构建了一个基于SSM和Vue技术的手机销售管理系统,该系统与MySQL数据库紧密集成,以实现多角色权限管理和功能定制…

2026/7/4 8:48:50阅读更多 →
PAT 甲级题目讲解:1008《Elevator》

PAT 甲级题目讲解:1008《Elevator》

✅ PAT 甲级题目讲解:1008《Elevator》摘要: 本文讲解 PAT 甲级 1008 题《Elevator》的完整解题过程。题目要求模拟电梯按顺序停靠给定楼层的耗时计算:上升每层 6 秒、下降每层 4 秒、每层停留 5 秒,初始位于第 0 层。文章从题目简…

2026/7/4 8:48:50阅读更多 →
5分钟终极指南:如何免费解锁Twitch订阅专属直播回放

5分钟终极指南:如何免费解锁Twitch订阅专属直播回放

5分钟终极指南:如何免费解锁Twitch订阅专属直播回放 【免费下载链接】TwitchNoSub An extension to watch sub only VOD on Twitch 项目地址: https://gitcode.com/gh_mirrors/tw/TwitchNoSub 还在为错过心爱主播的精彩直播而烦恼吗?每次打开Twit…

2026/7/4 9:53:54阅读更多 →
如何用开源7自由度机械臂30天打造AI机器人研究平台?

如何用开源7自由度机械臂30天打造AI机器人研究平台?

如何用开源7自由度机械臂30天打造AI机器人研究平台? 【免费下载链接】openarm A fully open-source humanoid arm for physical AI research and deployment in contact-rich environments. 项目地址: https://gitcode.com/GitHub_Trending/op/openarm 突破性…

2026/7/4 9:53:54阅读更多 →
5分钟快速上手:开源歌词下载工具让你轻松管理音乐库

5分钟快速上手:开源歌词下载工具让你轻松管理音乐库

5分钟快速上手:开源歌词下载工具让你轻松管理音乐库 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 还在为音乐播放器缺少歌词而烦恼吗?你是否曾经…

2026/7/4 9:53:54阅读更多 →
ComfyUI-WanVideoWrapper:零代码可视化AI视频生成工具,让创意无限流动

ComfyUI-WanVideoWrapper:零代码可视化AI视频生成工具,让创意无限流动

ComfyUI-WanVideoWrapper:零代码可视化AI视频生成工具,让创意无限流动 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 在AI视频生成技术快速发展的今天,Comfy…

2026/7/4 9:53:54阅读更多 →
pg_tileserv 使用教程

pg_tileserv 使用教程

pg_tileserv 使用教程 【免费下载链接】pg_tileserv A very thin PostGIS-only tile server in Go. Takes in HTTP tile requests, executes SQL, returns MVT tiles. 项目地址: https://gitcode.com/gh_mirrors/pg/pg_tileserv 1. 项目介绍 pg_tileserv 是一个基于 Go…

2026/7/4 9:53:54阅读更多 →
Umi-OCR完整教程:免费离线文字识别软件的7个实用技巧

Umi-OCR完整教程:免费离线文字识别软件的7个实用技巧

Umi-OCR完整教程:免费离线文字识别软件的7个实用技巧 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言…

2026/7/4 9:48:54阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/3 14:18:39阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/3 14:38:35阅读更多 →
端到端自动驾驶:从GTC‘26看工程可信落地的核心逻辑

端到端自动驾驶:从GTC‘26看工程可信落地的核心逻辑

1. 项目概述:当算法工程师走进GTC26展厅,看到的不是芯片,而是“端到端”的呼吸节奏“端到端”这三个字,在GTC’26现场出现的频率,高得像NVLink带宽测试时的峰值曲线——它不再是一个论文里的技术路径选项,而…

2026/7/4 0:02:48阅读更多 →
缺牙修复科普:常见义齿类型与选择参考

缺牙修复科普:常见义齿类型与选择参考

缺牙修复科普:常见义齿类型与选择参考牙齿缺失是中老年人群中较为常见的口腔问题,不仅会造成咀嚼不便、进食受影响,长期还可能对营养摄入与日常社交带来困扰。义齿是改善缺牙问题的常用方式,目前市面上的义齿种类较多,…

2026/7/4 0:02:48阅读更多 →
STM32F091RC与LTC6904实现高精度方波信号生成

STM32F091RC与LTC6904实现高精度方波信号生成

1. 项目概述:LTC6904与STM32F091RC的精准方波生成方案在嵌入式系统开发中,精确的时钟信号和定时控制往往是项目成败的关键。LTC6904作为一款低功耗、高精度的可编程振荡器芯片,与STM32F091RC这款ARM Cortex-M0内核微控制器的组合,…

2026/7/4 0:02:48阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/4 1:16:56阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/4 2:33:55阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/4 2:33:55阅读更多 →