当前位置: 首页 > article >正文

二叉树‘找叶子’的三种姿势:从PTA真题到LeetCode变体(层次/先序/后序遍历对比)

二叉树‘找叶子’的三种姿势从PTA真题到LeetCode变体层次/先序/后序遍历对比在算法学习的道路上二叉树遍历是每个程序员必须掌握的基本功。而找叶子节点这一看似简单的任务却能衍生出多种解法每种解法背后都隐藏着不同的算法思维。本文将带您深入探索层次遍历、先序遍历和后序遍历在解决叶子节点问题上的独特表现并通过PTA真题与LeetCode变体的对比展示如何将一种解法迁移到多种场景。1. 理解问题本质什么是叶子节点在二叉树中叶子节点是指没有子节点的末端节点。识别叶子节点是许多算法问题的基础比如计算树的高度、统计节点数量或进行特定类型的搜索。理解叶子节点的定义看似简单但在实际应用中却可能遇到各种变体普通叶子节点左右子节点均为空的节点左叶子节点作为父节点左子节点的叶子节点右叶子节点作为父节点右子节点的叶子节点特定深度叶子节点位于树中特定层次的叶子节点// 判断是否为叶子节点的基本代码 int isLeaf(TreeNode* node) { return node ! NULL node-left NULL node-right NULL; }2. 层次遍历法按层级收集叶子节点层次遍历BFS是解决PTA原题列出叶结点最直观的方法因为它天然符合题目要求的从上到下、从左到右的输出顺序。2.1 基本实现思路使用队列辅助进行遍历从根节点开始将节点入队每次从队列中取出节点进行检查如果是叶子节点则记录将非空子节点入队def level_order_leaves(root): if not root: return [] queue [root] leaves [] while queue: node queue.pop(0) if not node.left and not node.right: leaves.append(node.val) if node.left: queue.append(node.left) if node.right: queue.append(node.right) return leaves2.2 复杂度分析指标值说明时间复杂度O(n)需要访问所有节点空间复杂度O(w)w为树的最大宽度适用场景需要层级信息如按层统计或特定层叶子节点提示层次遍历特别适合需要保持节点顺序的场景如PTA原题要求的输出顺序。3. 先序遍历法深度优先的叶子收集先序遍历根-左-右虽然不能直接保证节点的层级顺序但在某些场景下更为灵活特别是当需要结合其他条件筛选叶子节点时。3.1 递归实现ListInteger preorderLeaves(TreeNode root) { ListInteger leaves new ArrayList(); preorderHelper(root, leaves); return leaves; } void preorderHelper(TreeNode node, ListInteger leaves) { if (node null) return; if (node.left null node.right null) { leaves.add(node.val); } preorderHelper(node.left, leaves); preorderHelper(node.right, leaves); }3.2 迭代实现def preorder_leaves(root): if not root: return [] stack [root] leaves [] while stack: node stack.pop() if not node.left and not node.right: leaves.append(node.val) # 注意入栈顺序先右后左 if node.right: stack.append(node.right) if node.left: stack.append(node.left) return leaves4. 后序遍历法从底部向上的视角后序遍历左-右-根在处理叶子节点时有其独特优势特别是在需要先处理子节点再处理父节点的场景中。4.1 经典应用计算叶子节点之和function postorderSum(root) { if (!root) return 0; let leftSum postorderSum(root.left); let rightSum postorderSum(root.right); if (!root.left !root.right) { return root.val; } return leftSum rightSum; }4.2 与先序遍历的对比特性先序遍历后序遍历访问顺序根-左-右左-右-根叶子处理时机首次遇到时所有子节点处理完后适用场景需要尽早筛选叶子节点需要子节点信息处理父节点5. 从PTA到LeetCode算法思维的迁移掌握了基本方法后我们可以将这些技巧应用到更复杂的问题中。以下是几个LeetCode上的变体问题5.1 找左叶子节点LeetCode 404int sumOfLeftLeaves(TreeNode* root) { if (!root) return 0; int sum 0; if (root-left !root-left-left !root-left-right) { sum root-left-val; } return sum sumOfLeftLeaves(root-left) sumOfLeftLeaves(root-right); }5.2 统计特定深度叶子节点LeetCode 366def findLeaves(root): result [] def dfs(node): if not node: return -1 left_depth dfs(node.left) right_depth dfs(node.right) current_depth max(left_depth, right_depth) 1 if current_depth len(result): result.append([]) result[current_depth].append(node.val) return current_depth dfs(root) return result6. 性能对比与选择策略不同的遍历方法在不同场景下各有优劣。以下是三种方法的多维度对比指标层次遍历先序遍历后序遍历顺序保持优秀一般一般空间效率中等优秀优秀实现复杂度中等简单中等适用问题范围特定顺序灵活筛选需要子节点信息在实际项目中我通常会根据以下因素选择方法如果需要保持层级顺序优先考虑层次遍历如果只需要收集叶子节点而不关心顺序先序遍历通常最简单如果需要基于子节点信息做决策后序遍历是更好的选择

相关文章:

二叉树‘找叶子’的三种姿势:从PTA真题到LeetCode变体(层次/先序/后序遍历对比)

二叉树‘找叶子’的三种姿势:从PTA真题到LeetCode变体(层次/先序/后序遍历对比) 在算法学习的道路上,二叉树遍历是每个程序员必须掌握的基本功。而"找叶子节点"这一看似简单的任务,却能衍生出多种解法&…...

在自动化工作流中集成Taotoken多模型聚合API

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在自动化工作流中集成Taotoken多模型聚合API 当开发者构建自动化脚本或智能体工作流时,一个常见的需求是能够灵活调用不…...

Python开发被内网卡脖子?5分钟用Docker搭个Pypiserver救急(含避坑指南)

Python内网开发救星:Docker化Pypiserver极速搭建指南 当你在客户现场调试代码时,突然发现内网环境无法连接PyPI官方源;当你在保密项目部署时,发现所有外网访问都被严格限制——这种"被卡脖子"的困境,相信不少…...

为什么83%的用户误读NotebookLM引用溯源?一文讲透证据链完整性校验四步法

更多请点击: https://intelliparadigm.com 第一章:为什么83%的用户误读NotebookLM引用溯源?一文讲透证据链完整性校验四步法 NotebookLM 的“引用溯源”功能并非传统意义上的文献标注,而是一套基于语义锚点与片段置信度的轻量级证…...

Loop窗口管理:5个高效工作流提升你的Mac生产力

Loop窗口管理:5个高效工作流提升你的Mac生产力 【免费下载链接】Loop Window management made elegant. 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop Loop是一款为macOS设计的优雅窗口管理工具,通过径向菜单、快捷键绑定和智能窗口操…...

DuClaw智能体:使用手册

学习并使用技能DuClaw 在创建时已为您预置部分常用技能,可根据任务需求自动匹配调用。查看已有技能1.进入对话界面,单击“技能平台”按钮,并在弹窗中单击“查看我的技能”。2.DuClaw会回复您当前已安装的技能以及相应的技能信息。安装并使用技…...

[物联网入门实战] 从零搭建C51最小系统:Proteus仿真点亮LED全流程解析

1. 为什么选择C51最小系统入门物联网? 很多刚接触物联网开发的朋友都会遇到一个难题:硬件成本高、调试复杂、学习曲线陡峭。我当年自学嵌入式时,烧坏过好几块开发板,后来发现用Proteus仿真C51最小系统是最稳妥的入门方式。这套组合…...

PUBG终极雷达系统免费搭建:从战场盲人到战术大师的完整指南

PUBG终极雷达系统免费搭建:从战场盲人到战术大师的完整指南 【免费下载链接】PUBG-maphack-map this is a working copy online-map from jussihi/PUBG-map-hack, use nodejs webserver instead of firebase. 项目地址: https://gitcode.com/gh_mirrors/pu/PUBG-m…...

NotebookLM审稿意见回复全链路避坑清单,含8个高频雷区+对应话术库(限时开放2024最新版PDF)

更多请点击: https://intelliparadigm.com 第一章:NotebookLM审稿意见回复全链路避坑清单导论 NotebookLM 作为 Google 推出的基于文档理解的 AI 助手,在学术协作与论文修订场景中展现出独特优势,但其在处理审稿意见回复时存在隐…...

38岁大厂P9被裁后卖保险:成年人的职场,没有铁饭碗

来自:推荐一个程序员编程资料站:http://cxyroad.com副业赚钱专栏:https://xbt100.top2024年IDEA最新激活方法后台回复:激活码CSDN免登录复制代码插件下载:CSDN复制插件以下是正文。01 | P9也不是免死金牌最近在网上看到…...

ssm图书在线商城(10044)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远程调试控屏包运行一键启动项目&…...

如何3步掌握MultiFunPlayer:专业设备同步工具快速入门指南

如何3步掌握MultiFunPlayer:专业设备同步工具快速入门指南 【免费下载链接】MultiFunPlayer flexible application to synchronize various devices with media playback 项目地址: https://gitcode.com/gh_mirrors/mu/MultiFunPlayer MultiFunPlayer是一款专…...

注册新会员页面

最终效果初始代码第一步&#xff1a;设置导航菜单第二步&#xff1a;设置基本信息&#xff08;必填&#xff09;第三步&#xff1a;设置其他信息&#xff08;选填&#xff09;完整的代码<!DOCTYPE html> <html><head><title>注册新会员</title>&…...

代码语义可视化架构的突破性实现:MultiHighlight如何将代码理解效率提升300%

代码语义可视化架构的突破性实现&#xff1a;MultiHighlight如何将代码理解效率提升300% 【免费下载链接】MultiHighlight Jetbrains IDE plugin: highlight identifiers with custom colors &#x1f3a8;&#x1f4a1; 项目地址: https://gitcode.com/gh_mirrors/mu/MultiH…...

2025最权威的AI学术网站解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在人工智能技术迅猛快速发展的当下&#xff0c;各种各样的 AI 辅助论文写作工具不断地大量涌…...

AI第一次科研竞赛中击败人类!Opus 4.7狂飙2930步创世界纪录

来源&#xff1a;新智元Prime Intellect把Opus 4.7和GPT 5.5关进H200集群&#xff0c;不给人类指导&#xff0c;跑了1万次实验。结果&#xff1a;AI第一次在科研竞赛中打破人类纪录。2930步&#xff0c;递归自改进的卢比孔河&#xff0c;被跨过了。历经1.4万小时H200算力测试与…...

使用taotoken后matlab调用大模型api的延迟与稳定性体验分享

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用taotoken后matlab调用大模型api的延迟与稳定性体验分享 1. 背景与接入动机 在数据处理与科学计算项目中&#xff0c;我们经常…...

ICC II时钟树综合(CTS)前,这5个NDR和约束设置没做好,后期时序肯定崩

ICC II时钟树综合前的5个致命陷阱&#xff1a;NDR与约束设置实战指南 时钟树综合&#xff08;CTS&#xff09;是数字后端设计中最关键的阶段之一&#xff0c;而90%的后期时序问题往往源于CTS前的配置疏漏。本文将深入剖析五个最容易被忽视却影响深远的设置环节&#xff0c;结合…...

Seraphine:5大核心技术构建的智能英雄联盟战绩查询与决策系统

Seraphine&#xff1a;5大核心技术构建的智能英雄联盟战绩查询与决策系统 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine Seraphine是一款基于Python和PyQt5开发的高效智能开源英雄联盟战绩查询工具&#xff…...

编写程序统计职场上下级沟通频率,工作执行效果数据,搭建高效沟通模式,减少指令传达偏差工作失误。

构建一个职场上下级沟通频率与工作执行效果分析的商务智能示例项目&#xff0c;去营销化、中立化&#xff0c;仅用于学习与工程实践参考。一、实际应用场景描述在任何组织中&#xff0c;上下级沟通质量直接决定执行效率&#xff1a;- 上级布置任务 → 下级理解并执行 → 反馈结…...

机器学习工作流编排利器:machiney-engine 轻量级流水线引擎详解

1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目&#xff0c;叫Reidston/machiney-engine。光看名字&#xff0c;你可能会觉得这又是一个“机器学习引擎”或者“AI框架”&#xff0c;市面上这类项目多如牛毛&#xff0c;从TensorFlow、PyTorch这样的巨头&#xff0…...

PIC单片机入门实战:基于F1评估板的开发环境搭建与核心外设应用

1. 项目概述&#xff1a;为什么选择F1评估板作为起点&#xff1f;如果你刚开始接触Microchip的PIC单片机&#xff0c;或者是从传统的PIC16F877A这类经典型号转向更现代的架构&#xff0c;面对琳琅满目的开发板可能会有点无从下手。今天我想聊聊我手头这块“Microchip F1评估平台…...

金融技能学习路径:从财务基础到Python建模的实战指南

1. 项目概述&#xff1a;为什么我们需要一个“金融技能”清单&#xff1f;如果你在金融行业工作&#xff0c;或者对个人理财、投资分析、公司财务感兴趣&#xff0c;你大概率有过这样的经历&#xff1a;面对海量的在线课程、书籍、论坛帖子和工具推荐&#xff0c;感到无所适从。…...

MASA模组全家桶汉化包:3329条专业翻译,彻底告别英文界面困扰

MASA模组全家桶汉化包&#xff1a;3329条专业翻译&#xff0c;彻底告别英文界面困扰 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese 还在为Minecraft技术模组的英文界面而头疼吗&#x…...

专业日志分析利器glogg:解决大规模日志监控与智能搜索的技术方案

专业日志分析利器glogg&#xff1a;解决大规模日志监控与智能搜索的技术方案 【免费下载链接】glogg A fast, advanced log explorer. 项目地址: https://gitcode.com/gh_mirrors/gl/glogg 在当今的分布式系统和微服务架构中&#xff0c;日志分析已成为系统运维、故障排…...

高校站群建设方案:站群模式VS单站建设,核心优势详解

在高校信息化建设中&#xff0c;"官网站群改造"正逐渐取代传统的"单站建设"模式&#xff0c;成为主流选择。要理解这一趋势&#xff0c;首先要明白高校网站建设面临的现实困境。高校传统单站建设的痛点过去&#xff0c;高校各学院、职能部门往往各自为政&a…...

独立开发者如何利用Taotoken的Token Plan有效控制项目预算

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 独立开发者如何利用Taotoken的Token Plan有效控制项目预算 对于独立开发者或小型团队而言&#xff0c;在构建AI应用时&#xff0c;…...

专业无人机日志分析工具:UAV Log Viewer 让飞行数据分析更简单高效

专业无人机日志分析工具&#xff1a;UAV Log Viewer 让飞行数据分析更简单高效 【免费下载链接】UAVLogViewer An online viewer for UAV log files 项目地址: https://gitcode.com/gh_mirrors/ua/UAVLogViewer 无人机飞行日志分析是每个飞手和专业团队必须掌握的技能&a…...

2026年IPA防破解安全加固公司怎么选?这份iOS加固服务商横向对比清单请收好

当你的iOS应用核心代码被逆向、商业逻辑被剽窃、盗版版本在分发平台泛滥时&#xff0c;寻找一家靠谱的IPA防破解安全加固公司就成了技术负责人的当务之急。但面对市面上众多服务商&#xff0c;如何判断哪家方案真正有效&#xff0c;且不影响App Store过审&#xff1f;本文基于多…...

学一下PLC2--软件PLC(TODO)

既然你手头有 Raspberry Pi Pico&#xff0c;你甚至不需要买任何新的 PLC 硬件&#xff0c;可以直接把它变成一个标准的工业 PLC&#xff01; 实现原理&#xff1a; OpenPLC 是一个开源的符合 IEC 61131-3 国际标准的 PLC 软件系统。 它完美支持 Raspberry Pi Pico (RP2040)。…...