news 2026/6/26 2:27:56

【基础算法精讲 12】二叉树的最近公共祖先

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【基础算法精讲 12】二叉树的最近公共祖先

236. 二叉树的最近公共祖先

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

思路:1.当前节点是空节点,直接返回空节点2.当前节点是p节点,那么返回p节点,不需要往下递归。假设当前节点是p节点,那么q节点有两种情况:一是作为p节点的孩子(孙子)节点,那么它们的公共祖先仍是p节点。二是q节点不和p节点在同一棵子树上,那么也没必要往下递归。3.当前节点是q节点,那么返回q节点,不需要往下递归4.如果p,q节点都在当前节点的左子树,那么递归左子树即可(只有左子树能找,返回递归左子树的结果) 如果p,q节点都在当前节点的右子树,那么递归右子树即可(只有右子树能找,返回递归右子树的结果) 如果p,q节点分别在当前节点的左子树和右子树,那么公共祖先是当前节点。5.如果p,q节点不在当前节点的左右子树,返回空节点即可。也就是情况1。 代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } *//** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */classSolution{publicTreeNodelowestCommonAncestor(TreeNoderoot,TreeNodep,TreeNodeq){if(root==null||root==p||root==q){returnroot;}TreeNodeleft=lowestCommonAncestor(root.left,p,q);TreeNoderight=lowestCommonAncestor(root.right,p,q);if(left!=null&&right!=null){returnroot;}// 如果只有左子树找到,就返回左子树的返回值// 如果只有右子树找到,就返回右子树的返回值// 如果左右子树都没有找到,就返回 null(注意此时 right = null)returnleft!=null?left:right;}}

235. 二叉搜索树的最近公共祖先

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

思路:需要根据二叉搜索树的性质。 情况1ifp.val<root.val and q.val<root.val。则需要递归当前节点左子树。 情况2ifp.val>root.val and q.val>root.val。则需要递归当前节点右子树。 情况3ifp.val<root.val and q.val>root.val。最近公共祖先就是当前节点。ifp.val>root.val and q.val<root.val。最近公共祖先就是当前节点。ifroot==p or root==q。返回当前节点即可。 ps:为什么这题不需要判断空节点? 已知题目给出p、q 为不同节点且均存在于给定的二叉搜索树中。那么p和q节点一定存在在树中,并且可以根据当前节点的值和p,q的值提前比对,就能知道p,q是在左子树中,还是在右子树中。而上一题需要判断空节点的原因是,不像本题一样能够提前判断p,q节点在哪颗子树中,可能递归当前子树没有p或者q节点,所以需要判断空节点。 代码:classSolution{publicTreeNodelowestCommonAncestor(TreeNoderoot,TreeNodep,TreeNodeq){intcur=root.val;if(p.val<cur&&q.val<cur){returnlowestCommonAncestor(root.left,p,q);}if(p.val>cur&&q.val>cur){returnlowestCommonAncestor(root.right,p,q);}returnroot;}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/26 2:25:56

【设计书+项目源码】基于YOLOv8+Flask的电动车进电梯检测系统

本文涉及的全部源码、训练好的模型权重、数据集、配套文档已整理打包&#xff0c;文末附下载链接&#xff0c;方便读者一键复现与二次开发。开发目的 随着城市化进程加速&#xff0c;电动自行车&#xff08;俗称电动车&#xff09;因其便捷性成为居民短途出行的重要工具&#x…

作者头像 李华
网站建设 2026/6/26 2:25:53

TrollInstallerX:基于双漏洞利用机制的TrollStore部署方案

TrollInstallerX&#xff1a;基于双漏洞利用机制的TrollStore部署方案 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX TrollInstallerX是一款针对iOS 14.0至16.6.1系统的…

作者头像 李华
网站建设 2026/6/26 2:24:14

翻译公司2026视频口译十强榜揭晓!视频口译画质清晰

随着远程协作和全球视频会议的普及&#xff0c;视频口译成为连接多语言沟通的核心工具。其难点在于不仅要求译员具备即时反应能力和领域知识&#xff0c;还必须适应不同平台的技术限制&#xff0c;确保声音与画面同步、画质清晰&#xff0c;避免因延迟或模糊影响理解。在近期发…

作者头像 李华
网站建设 2026/6/26 2:21:51

在 muShanghai × 观猹 AI 练摊集市的一次高密度体验

上周五博主去了 muShanghai 观猹 联合办的 AI 集市。 这场活动最有意思的&#xff0c;不是谁模型更大&#xff0c;而是那句特别产品经理、特别用户导向的话&#xff1a;5分钟玩上AI 这篇文章将会详细介绍我实际体验过的很多很有意思的项目产品。希望大家给予他们更多支持 展位…

作者头像 李华