[LeetCode][LCR 193]二叉搜索树的最近公共祖先

题目

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

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

例如,给定如下二叉搜索树:
root = [6,2,8,0,4,7,9,null,null,3,5]

  • 示例 1:

输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8

输出: 6

解释: 节点 2 和节点 8 的最近公共祖先是 6。

  • 示例 2:

输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4

输出: 2

解释: 节点 2 和节点 4 的最近公共祖先是 2, 因为根据定义最近公共祖先节点可以为节点本身。

  • 说明:
    所有节点的值都是唯一的。
    p、q 为不同节点且均存在于给定的二叉搜索树中。

注意:本题与主站 235 题相同:LeetCode - Lowest Common Ancestor of a Binary Search Tree

解法:

  1. 本题给的二叉树为二叉搜索树,当节点值比 root 小,则在 root->left 上,反之则在 root->right 上
  2. 如果都在 root->left 上,则在左子树进行搜索,反之在右子树进行搜索
  3. 如果在 root 两侧,则 root 即为最近公共祖先

cpp 复制代码
class Solution {
public:

    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if(p->val > q->val) swap(p, q); // 保证 p 的值小于等于 q 的值

        if(p->val <= root->val && q->val >= root->val) return root; // 如果 p、q 分别在 root 的两侧,说明 root 就是最近公共祖先
        if(q->val < root->val) return lowestCommonAncestor(root->left, p, q); // 如果 p、q 都在 root 的左侧,则递归左子树
        if(p->val > root->val) return lowestCommonAncestor(root->right, p, q); // 如果 p、q 都在 root 的右侧,则递归右子树

        return nullptr; // 默认情况下返回空指针
    }
};
相关推荐
uhakadotcom1 分钟前
刚发布的PyTorch 2.7提供了什么 新特性
算法·面试·github
新生农民1 小时前
30分钟解决8道算法题
java·数据结构·算法
bbc1212261 小时前
2025/4/23 心得
数据结构·算法
WaitWaitWait015 小时前
LeetCode每日一题4.20
算法·leetcode
蒟蒻小袁6 小时前
力扣面试150题--有效的括号和简化路径
算法·leetcode·面试
跳跳糖炒酸奶7 小时前
第十五讲、Isaaclab中在机器人上添加传感器
人工智能·python·算法·ubuntu·机器人
明月看潮生8 小时前
青少年编程与数学 02-018 C++数据结构与算法 06课题、树
数据结构·c++·算法·青少年编程·编程与数学
小指纹8 小时前
动态规划(一)【背包】
c++·算法·动态规划
_安晓8 小时前
数据结构 -- 图的应用(一)
数据结构·算法·图论
阳洞洞9 小时前
leetcode 二分查找应用
算法·leetcode·二分查找