刷刷刷 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;
}
}
重难点

附:学习资料链接

posted @   blacksonny  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示