LeetCode235:二叉搜索树的最近公共祖先

题目描述

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

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

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

代码

递归

cpp 复制代码
class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if (root == nullptr) return nullptr;
        if (root->val > p->val && root->val > q->val) {
            TreeNode* left = lowestCommonAncestor(root->left, p, q);
            if (left) return left;
        }
        else if (root->val < p->val && root->val < q->val) {
            TreeNode* right = lowestCommonAncestor(root->right, p, q);
            if (right) return right;
        }
        return root;
    }
};

迭代法

cpp 复制代码
class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        while (root) {
            if (root->val > p->val && root->val > q->val)
                root = root->left;
            else if (root->val < p->val && root->val < q->val)
                root = root->right;
            else return root;
        }
        return nullptr;
    }
};
相关推荐
阿文的代码库1 分钟前
线段树入门:算法分析
数据结构·算法
水木流年追梦9 分钟前
大模型入门-DPO 直接偏好优化
人工智能·学习·算法·机器学习·正则表达式
alphaTao20 分钟前
LeetCode 每日一题 2026/5/18-2026/5/24
python·leetcode
悠仁さん31 分钟前
数据结构 树 二叉树 堆 (堆的模拟实现篇)
数据结构
汉克老师40 分钟前
GESP6级C++考试语法知识(二十七、广度优先搜索(二、二维BFS))
c++·算法·图论·宽度优先·广度优先搜索·gesp6级·gesp六级
此生决int41 分钟前
算法从入门到精通——位运算
数据结构·c++·算法·蓝桥杯
春栀怡铃声42 分钟前
【C++修仙录02】筑基篇:vector 使用
开发语言·c++·算法
Loli_Wolf1 小时前
AI 原生研发闭环:从提需到线上监测,再自动回到提需
人工智能·深度学习·算法·microsoft·ai·ai编程·harness
丁劲犇1 小时前
使用TraeAI开发Web页面测试MSYS2 ucrt64 Qt MCP服务器
服务器·前端·c++·qt·mcp
计算机安禾1 小时前
【算法分析与设计】第4篇:分治策略的理论框架与经典案例
数据结构·算法·排序算法