尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
DeepSeek    LeetCode 236. 二叉树的最近公共祖先 Java实现
LeetCode 236. 二叉树的最近公共祖先 Java 实现思路递归后序遍历从根节点开始递归· 如果当前节点为空或当前节点就是 p 或 q直接返回当前节点。· 分别递归左右子树得到 left 和 right。· 如果 left 和 right 都非空说明 p 和 q 分别在左右两侧当前节点就是最近公共祖先。· 否则返回非空的那一个说明两个目标节点都在同一侧或只找到了其中一个。Java 代码classSolution{publicTreeNodelowestCommonAncestor(TreeNoderoot,TreeNodep,TreeNodeq){// 递归终止条件if(rootnull||rootp||rootq){returnroot;}// 后序遍历先处理左右子树TreeNodeleftlowestCommonAncestor(root.left,p,q);TreeNoderightlowestCommonAncestor(root.right,p,q);// 左右都找到了说明 p、q 分布在两侧当前节点就是 LCAif(left!nullright!null){returnroot;}// 否则返回非空的那一侧returnleft!null?left:right;}}复杂度分析· 时间复杂度O(n)每个节点最多访问一次。· 空间复杂度O(h)递归栈深度为树高。最坏情况下链状树为 O(n)。示例// 树结构// 3// / \// 5 1// / \ / \// 6 2 0 8// / \// 7 4p5,q1→3p5,q4→5p6,q4→5关键点· 递归函数含义在以 root 为根的子树中寻找 p 和 q 的最近公共祖先。· 如果当前节点就是 p 或 q直接返回它因为不可能再往下找到更近的祖先。· 左右子树返回值都非空说明两个目标节点分居两侧当前节点即为答案。· 只需要一次 DFS无需额外存储路径。附迭代写法父指针 祖先集合classSolution{publicTreeNodelowestCommonAncestor(TreeNoderoot,TreeNodep,TreeNodeq){MapTreeNode,TreeNodeparentnewHashMap();DequeTreeNodestacknewArrayDeque();parent.put(root,null);stack.push(root);// 遍历整棵树记录每个节点的父节点while(!parent.containsKey(p)||!parent.containsKey(q)){TreeNodenodestack.pop();if(node.left!null){parent.put(node.left,node);stack.push(node.left);}if(node.right!null){parent.put(node.right,node);stack.push(node.right);}}// 记录 p 到根的所有祖先SetTreeNodeancestorsnewHashSet();while(p!null){ancestors.add(p);pparent.get(p);}// 从 q 向上找第一个在 p 祖先集合中的节点while(!ancestors.contains(q)){qparent.get(q);}returnq;}}迭代写法时间复杂度 O(n)空间复杂度 O(n)适合不想用递归或树很深的情况。
RELATED

相关推荐

26年程序员转AI指南:收藏这份学习路线,轻松拥抱大模型时代!

26年程序员转AI指南:收藏这份学习路线,轻松拥抱大模型时代!

文章分享了程序员如何成功转型AI领域的心得与经验。核心内容围绕五个学习阶段展开:先理解大模型调用本身,再学习AI应用开发所需能力,重点掌握RAG,随后学习Agent,最后通过项目实践积累经验。强调理解模型、业务和工程的…

📅 2026/10/6 23:51:56
PHP登录安全实战:TOTP多因素认证、风控拦截与Redis会话一致性

PHP登录安全实战:TOTP多因素认证、风控拦截与Redis会话一致性

前阵子接手一个老 PHP 电商项目,老板让我把登录安全做扎实。当时我对多因素认证、风控拦截、会话一致性这三块也只是有个大概认知,网上现成的库又不敢直接塞进生产环境,干脆从零开始写一套。正好手上有个 PHP 8.3 的空闲服务,配合…

📅 2026/10/6 23:46:56
数组:算法竞赛的地基,从内存模型到高级数据结构的底层逻辑

数组:算法竞赛的地基,从内存模型到高级数据结构的底层逻辑

很多同学刚接触算法竞赛时,第一反应是去啃各种“高大上”的算法——图论、动态规划、网络流、字符串匹配。但真正让我意识到“地基”重要性的,是一次比赛中因为数组开小导致半小时调不出错误、最后发现是边界问题的惨痛教训。数组,这个最基础…

📅 2026/10/6 23:46:56
MORE NEWS

更多资讯

📰

回溯法详解:LeetCode 46. 全排列

一、 问题描述给定一个不含重复数字的数组 nums,返回其所有可能的全排列。你可以按任意顺序返回答案。示例:输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]二、 核心思路:回溯 (Backtrac…

📰

【Web全栈进阶】PostgreSQL上手:Docker跑库 + 把早报站从SQLite迁过去

今天不写新功能,做一次“搬家”:把早报站的数据从SQLite搬进PostgreSQL——这是整个二季的地基工程。 🎯 本篇产出:一个跑在Docker里的PostgreSQL、一份可重复执行的数据迁移脚本、以及“为什么换”的完整决策链。含代码约60行。 …

📰

AI获客怎样减少重复线索?意客AI的原文复用与版本筛选

销售昨天看过一条办公室搬迁需求,今天又在“新线索”里看到它。如果对方已经暂停搬迁,第二次出现带来的只是一次重复阅读;如果需求范围变了,沿用昨天的沟通准备还可能问错问题。 星河卓越旗下意客AI根据业务描述寻找匹配需求&…

📰

装配车间MES落地指南:SimpleMES工单流转、BOM与齐套检查实战

简介:一套基于.NET 4.0的SimpleMES加工装配模拟系统,面向MES系统学习者、课程设计或毕业设计人员,以及需要快速搭建制造执行原型的开发者。服务端与客户端分工明确:服务端包含基础档案、加工与装配计划管理、实时看板和数据初始化…

📰

基于sEMG与IMU的手语手势识别:从数据采集到实时部署避坑指南

简介:这套基于sEMG(表面肌电)与IMU(惯性测量单元)的手语手势识别项目,面向从事人机交互、康复工程或移动感知研究的学生与开发者,覆盖从数据采集到实时识别的完整流程。包内共59个文件&#xff…

📰

手表页面退出后传感器还在采样:HarmonyOS 穿戴订阅的功耗预算与生命周期

手表页面退出后传感器还在采样:HarmonyOS 穿戴订阅的功耗预算与生命周期 先定义什么叫“通过” 运动页面退出后,日志仍持续收到传感器数据,几小时后耗电明显上升。排查发现每次进入页面都会新增监听,退出只停止 UI 定时器&#x…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬