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

【LeetCode 236】算法:二叉树的最近公共祖先

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

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

image


核心思路:

要找到给定二叉树中两个指定节点的最近公共祖先,可以使用递归的方法。基本思路是从根节点开始遍历树,检查每个节点是否同时包含目标节点 p 和 q。如果找到这样的节点,那么它就是 p 和 q 的最近公共祖先。

算法步骤:

  1. 递归终止条件:如果当前节点为空,返回 null。
  2. 检查根节点:如果当前节点是 p 或 q 之一,直接返回该节点,因为它是 p 和 q 的祖先。
  3. 递归搜索:分别在左子树和右子树中递归搜索 p 和 q。
  4. 合并结果:
    如果 p 和 q 分别在左子树和右子树中找到,说明当前节点 root 是它们的最近公共祖先。
    如果 p 和 q 都在左子树或右子树中找到,那么该子树的返回值就是 p 和 q 的最近公共祖先。
  5. 返回结果:根据上述逻辑返回找到的最近公共祖先。

复杂度分析:

  • 时间复杂度是 O(N),其中 N 是树中节点的数量,因为每个节点最多被访问一次。

  • 空间复杂度是 O(H),其中 H 是树的高度,这是由于递归调用的深度导致的。

Java代码实现:

class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {// 如果根节点为空,直接返回nullif (root == null) {return null;}// 如果根节点正好是p或q之一,那么它就是最近公共祖先if (root == p || root == q) {return root;}// 递归地在左子树和右子树中查找p和qTreeNode left = lowestCommonAncestor(root.left, p, q);TreeNode right = lowestCommonAncestor(root.right, p, q);// 如果左子树和右子树都找到了p和q,那么当前节点就是最近公共祖先if (left != null && right != null) {return root;}// 如果只在一个子树中找到,那么那个子树的结果就是答案return left != null ? left : right;}
}
http://www.sczhlp.com/news/50775/

相关文章:

  • seo网站快排成都建设网站公司简介
  • 网站建设公司华网天搜资源的搜索引擎
  • 手机 网站服务器wordpress 关键字内链
  • 网站开发的风险软件系统开发大概多少钱
  • 怎么样做网站编程重庆十大建筑公司排名
  • iis 网站绑定域名广州做公司网站
  • 福州网站建设哪个好个人博客手机网站模板
  • 织梦网站安装教程视频新泰营销型网站建设
  • 打开网站后直接做跳转页面建设银行网站注册用户
  • 现代CSS状态指示:使用accent-color和:user-valid等伪类美化表单
  • Linux gzip 命令使用说明
  • 20250829 之所思 - 人生如梦
  • 湖口县建站公司个人博客系统毕业设计论文
  • 合肥的网站建设州克旗网站制作5229998
  • 科技广告公司网站建设南宁网站快
  • 免费行情网站app下载大全信息手机网站模板下载
  • 网站空间和服务器有什么区别wordpress 单核 并发
  • 网站客户评价宝安营销型网站费用
  • 网站制作公司怎么样网站设置时间段访问
  • 广州专业做外贸网站建设wordpress drupal 比较
  • php asp jsp 网站简单的网站建设企业
  • 网站建设的基本流程图ai生成logo免费
  • 内蒙古住房和城乡建设网站网站开发服务合同
  • 网络设计专业可以学什么免费手机优化大师下载安装
  • 游戏网站的设计方案网站开发前台开发
  • 网站建设佰首选金手指十四湖北山河建设集团网站
  • 揭秘CSS遮罩与裁剪:让网页设计瞬间提升档次的创意技巧
  • 反向传播
  • dll生成lib
  • 2025最新版 MathType 7下载安装激活汉化教程:超详细图文版(含下载+安装+汉化激活+安装包)