[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; // 默认情况下返回空指针
    }
};
相关推荐
深圳雨林凯AI16 小时前
图案裂变的空间关系原理:元素放大为何必然挤压负空间,以及三个可调变量|雨林凯AI技术拆解
人工智能·算法
tellmewhoisi16 小时前
机器学习:聚类算法
算法·机器学习·聚类
yi01116 小时前
LeetCode 134 加油站:从 双循环暴力 演变到 贪心
linux·算法·leetcode
sogw-三叶草️16 小时前
LeetCode 989. 数组形式的整数加法
数据结构·算法
维克兜率天17 小时前
【维克】均值回归:跌多了会涨,涨多了会跌
开发语言·笔记·python·算法·均值算法·回归·量化
yi01117 小时前
DAY 14: LeetCode 394. 字符串解码|递归和栈到底怎么处理嵌套?
数据结构·笔记·python·算法·leetcode
P.D.Wei18 小时前
[Leetcode 1614] 括号的最大嵌套深度
算法·leetcode·职场和发展
红姐跨境书18 小时前
AI 的底层逻辑:从数据、算法到智能的本质
人工智能·算法
繁华的地方不一定留下你的脚印18 小时前
C++ 算法与 ranges:用 find_if、transform 写清数据处理意图
开发语言·c++·算法
青山是哪个青山18 小时前
LeetCode 64:最小路径和
算法