【LeetCode经典题解】搞定二叉树最近公共祖先:递归法+栈存路径法,附代码实现

【LeetCode经典题解】搞定二叉树最近公共祖先:递归法+栈存路径法,附代码实现
在这里插入图片描述
🎁个人主页:User_芊芊君子
🎉欢迎大家点赞👍评论📝收藏⭐文章
🔍系列专栏:Java.数据结构
在这里插入图片描述


在这里插入图片描述


【前言】

二叉树的最近公共祖先是数据结构中的经典问题,无论是算法面试还是实际开发都高频出现。本文将从问题本身出发,拆解递归法与栈存路径法两种核心思路的逻辑步骤,并附上完整代码实现,帮你快速掌握这一考点。

文章目录:

一、二叉树的最近共同祖先

在这里插入图片描述

二、思路分析

方法一:递归法

判空

  • 如果根节点为空,直接返回null
  • 如果当前节点是p或者q,那么这个节点就是最近公共祖先

递归

  • 分别遍历当前节点的左子树和右子树,找到p和q的最近公共祖先,存于TreeNode leftRet或者TreeNode rightRet

结果

  • 如果左右子树都找到,那么当前节点就是p和q的最近公共祖先
  • 如果左子树找到,那就返回左子树的结果;

如果右子树找到,那就返回右子树的结果;

在这里插入图片描述

方法二:栈存路径法

获取路径

通过深度优先搜索,分别找到从根节点到p和q的路径中所有节点,并分别存入两个栈中

对齐栈长度

比较两个栈中元素长度,将较长的栈中元素弹出,然后比较两个栈中的下一深度元素是否相等

找公共祖先

同时弹出两个栈中不相等的栈顶元素,第一个相同的节点就是最近公共祖先

在这里插入图片描述

三、代码展示

方法一:递归法

publicTreeNodelowestCommonAncestor(TreeNode root,TreeNode p,TreeNode q){//当前节点为空,直接返回nullif(root ==null){returnnull;}//当前节点是p或者q,返回当前节点(祖先)if(root == p || root == q){return root;}//递归探索左子树,找到p和q的最近祖先TreeNode leftRet =lowestCommonAncestor(root.left, p, q);//递归探索右子树,找到p和q的最近祖先TreeNode rightRet =lowestCommonAncestor(root.right, p, q);//左子树和右子树都找到if(leftRet !=null&& rightRet !=null){return root;//左子树找到}elseif(leftRet !=null){return leftRet;}else{//右子树找到return rightRet;}}

方法二:栈存路径法

publicbooleangetPath(TreeNode root,TreeNode node,Stack<TreeNode> stack){if(root ==null){returnfalse;}//将当前节点压入路径 stack.push(root);//找到目标节点if(root == node){returntrue;}//递归搜索左子树boolean flg =getPath(root.left,node,stack);if(flg){returntrue;}//递归搜索右子树 flg =getPath(root.right,node,stack);if(flg){returntrue;}//左右子树都没找到,弹出当前节点 stack.pop();returnfalse;}publicTreeNodelowestCommonAncestor(TreeNode root,TreeNode p,TreeNode q){if(root ==null){returnnull;}//找到跟到p和q的路径Stack<TreeNode> stackp =newStack<>();Stack<TreeNode> stackq =newStack<>();getPath(root,p,stackp);getPath(root,q,stackq);//对齐两个栈长度int sizep = stackp.size();int sizeq = stackq.size();int size = sizep-sizeq;if(size>0){//stacp更长,弹出多余元素while(size !=0){ stackp.pop(); size--;}}else{////stacq更长,弹出多余元素 size = sizeq-sizep;while(size !=0){ stackq.pop(); size--;}}//此时两个栈大小一样,//同时弹出栈顶,找到相同的while(!stackp.isEmpty()&&!stackq.isEmpty()){if(stackp.peek().equals(stackq.peek())){return stackp.peek();} stackp.pop(); stackq.pop();}returnnull;}

四、总结

通过递归法的“自底向上”回溯,以及栈存路径法的“路径对比”思路,我们可以高效求解二叉树的最近公共祖先问题——前者利用递归特性简化代码,后者通过显式路径存储更直观易懂。结合本文的思路分析与代码示例,你可以根据场景灵活选择解法,轻松应对这类二叉树算法题。

Read more

告别代码,迎接代理:Claude Code、OpenCode、OpenClaw等六大AI工具全面解析

如果你最近关注科技圈,一定会被一个词刷屏:AI代理(AI Agent)。从2024年底到2026年初,AI的发展已经不再局限于聊天窗口里的文字游戏,而是真正开始操控电脑、编写代码、甚至替我们“干活”。 Anthropic、OpenAI以及开源社区接连丢出一系列重磅产品:Claude Code、Cowork、OpenCode、OpenWork、OpenClaw、Codex……这些名字听起来既有重复又相互关联,它们到底有什么区别?哪个才是普通人也用得上的工具? 今天,我们就来一次性梳理这七大项目,看看它们分别是什么,以及它们如何共同指向一个“AI执行一切”的未来。 一、六大“工具”逐个看 在深入对比之前,我们先分别认识一下这六位主角。它们虽然都顶着“AI工具”的头衔,但出身、能力和使命却大相径庭。 1. Claude Code:披着编程外衣的通用Agent 出身:Anthropic(2024年底推出) 核心定位:终端里的自主AI助手。 Claude

By Ne0inhk
【保姆级教程】告别命令行!ClawX:首款 OpenClaw 可视化桌面客户端,零门槛玩转 AI 智能体!

【保姆级教程】告别命令行!ClawX:首款 OpenClaw 可视化桌面客户端,零门槛玩转 AI 智能体!

目录 1、为什么选择 ClawX?(核心亮点) 🎯 零配置门槛 (Zero Configuration) 💬 现代化的聊天体验 ⏰ 可视化的自动化任务 (Cron Automation) 🧩 技能插件市场 (Skill System) 2、技术揭秘:它是如何工作的? 3、快速上手指南 4、注册并获取高性能 API 5、在 ClawX 中接入 API 6、验证连接与初次体验 🚀 结语:这只是冰山一角 在这个“万物皆可 Agent”的时代,我们见证了 OpenClaw 这样优秀的开源项目如何重新定义了 AI 任务编排。它强大、灵活,能帮我们串联起各种复杂的 AI 工作流。 但是,你是否也曾有过这样的困扰? * 想要体验最新的 AI

By Ne0inhk
零代码AI革命:万字实战指南,用Dify轻松构建企业级智能知识库

零代码AI革命:万字实战指南,用Dify轻松构建企业级智能知识库

前言 在当今这个信息爆炸的时代,数据已成为企业和个人的核心资产。然而,如何从浩如烟海的文档、报告、手册和笔记中,高效、精准地提取所需信息,已成为一个普遍存在的痛点。传统的关键词搜索,面对复杂和口语化的查询时常常显得力不从心,无法真正理解用户的深层意图。我们迫切需要一种更智能、更接近自然语言交互的解决方案。 当下普遍存在的几大痛点: 1. 知识孤岛与检索困境: 企业内部的知识散落在不同的系统(如 Confluence, SharePoint, 本地文件夹)中,形成一个个信息孤岛。员工,尤其是新员工,为了找到一个问题的答案,可能需要在多个平台之间来回切换,耗费大量时间,效率低下。 2. AI 技术应用门槛高昂: 大语言模型(LLM)的出现为解决上述问题带来了曙光。但对于大多数非 AI 专业的开发者和中小企业而言,从零开始部署、微调、管理一个大模型,并将其封装成可用的应用,涉及到复杂的后端开发、算法知识、GPU 资源管理和高昂的运维成本,是一项几乎不可能完成的任务。 3.

By Ne0inhk
KimiClaw/MaxClaw/NullClaw/OpenFang/ZeroClaw/PicoClaw/TinyClaw/Miclaw/ArkClaw等18大小龙虾AI Agent框架技术选型全解析

KimiClaw/MaxClaw/NullClaw/OpenFang/ZeroClaw/PicoClaw/TinyClaw/Miclaw/ArkClaw等18大小龙虾AI Agent框架技术选型全解析

OpenClaw登顶GitHub全球TOP1!26万星超越React/Linux,KimiClaw/MaxClaw/NullClaw/OpenFang/EasyClaw/CoPaw/OpenClawChinese/LobsterAI/ClawPhone/Nanobot/NanoClaw/IronClaw/ZeroClaw/PicoClaw/TinyClaw/Miclaw/ArkClaw等18大AI Agent框架技术选型全解析 文章标签:#OpenClaw #GitHub星标第一 #KimiClaw #MaxClaw #NullClaw #OpenFang #EasyClaw #CoPaw #OpenClawChinese #LobsterAI #ClawPhone #Nanobot #NanoClaw #IronClaw #ZeroClaw #PicoClaw #TinyClaw #Miclaw #ArkClaw #AIAgent框架 #技术选型 #GitHub开源 🔥 历史性时刻:2026年3月,OpenClaw以26万+ GitHub Stars正式超越React(24.

By Ne0inhk