刷刷刷 Day 22 | 235. 二叉搜索树的最近公共祖先
235. 二叉搜索树的最近公共祖先
LeetCode题目要求
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]

示例
输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8 输出: 6 解释: 节点 2 和节点 8 的最近公共祖先是 6。
解题思路
利用二叉树的特性,根据 p q 两个节点值来确定在左子树还是右子树。但无论如何他们的最近公共祖先再试 p q 之间的。
通过递归及二叉搜索树的特点,来判断 p q 位置,如果同时小于当前节点值,那么在左子树递归,如果同时大于当前节点值,那么在右子树递归。
上代码
class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { // 二叉搜索树的特性。确定 p q 的位置,在左侧 还是在 右侧 // 确定终止条件 if (root == null) { return null; } // 如果 p q 在左子树, if (root.val > p.val && root.val > q.val) { return lowestCommonAncestor(root.left, p, q); } // 如果 p q 在右子树 if (root.val < p.val && root.val < q.val) { return lowestCommonAncestor(root.right, p, q); } return root; } }
重难点
附:学习资料链接
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了