【力扣刷题练习】236. 二叉树的最近公共祖先

题目描述:

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

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

题目解答:

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

题目思路:

递归左右子树,寻找 p 和 q 的最近公共祖先。

如果左子树或右子树中有一个是空(也就是说,这个子树没有公共祖先),那么返回非空的子树中的结果。

最后,如果左子树和右子树都找到了公共祖先(也就是说,它们都不为空),那么当前的节点 root 就是 p 和 q 的最近公共祖先。所以,返回 root。

相关推荐
京东零售技术10 分钟前
下一代 Lakehouse 智能未来新引擎 | Apache Hudi Meetup亚洲站活动回顾
算法
京东零售技术12 分钟前
NeurIPS 2025 | TANDEM:基于双层优化的数据配比学习方法
后端·算法
zmzb010321 分钟前
C++课后习题训练记录Day42
开发语言·c++·算法
CoovallyAIHub23 分钟前
MAR-YOLOv9:革新农业检测,YOLOv9的“低调”逆袭
深度学习·算法·计算机视觉
dragoooon3427 分钟前
[优选算法专题十.哈希表 ——NO.55~57 两数之和、判定是否互为字符重排、存在重复元素]
数据结构·散列表
Mr Lee_29 分钟前
Smali 文件生成dex装箱算法整合
开发语言·python·算法
LDG_AGI35 分钟前
【推荐系统】深度学习训练框架(十三):模型输入——《特征索引》与《特征向量》的边界
人工智能·pytorch·分布式·深度学习·算法·机器学习
CoovallyAIHub37 分钟前
如何让SAM3在医学图像上比专用模型还强?一个轻量Adapter如何让它“秒变”专家?
深度学习·算法·计算机视觉
suoge22342 分钟前
热传导控制方程有限元弱形式推导-有限元编程入门
算法
希望有朝一日能如愿以偿42 分钟前
力扣每日一题:统计梯形的数目
算法·leetcode·职场和发展