【力扣刷题练习】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。

相关推荐
java_nnnn1 小时前
LeetCode刷题滑动窗口(水果成篮+找到字符串中所有字母的异位词)Java
java·开发语言·leetcode
小羊没烦恼!1 小时前
异步编程:线程概述及使用
java·开发语言·mysql·算法·c#
wanderist.1 小时前
202609CSP认证P3
算法
云淡风轻~窗明几净2 小时前
角谷猜想最接近严格证明的测试 Version1.1.1
人工智能·算法·机器学习·图论
机器学习之心2 小时前
PINN × SVM × NSGA-II × 熵权TOPSIS:一套跑通「建模—优化—决策」的多目标优化框架
算法·机器学习·支持向量机
别动我齐刘海3 小时前
机器人 C++ / 系统联调补强2——异常处理、Protobuf
linux·c++·人工智能·学习·算法·机器学习·机器人
fish_zzzz3 小时前
笔记-论数据结构1
数据结构
文丑颜不良啊3 小时前
LeetCode276~300题目解析
java·leetcode
荆棘鸟智能3 小时前
短历时洪水预报算法实践:水文模型与 LightGBM 残差订正融合
人工智能·算法·机器人
葫三生4 小时前
关于三生原理系列被技术开发社区批量收录或引发策展边界讨论的一种思考
大数据·人工智能·深度学习·算法·机器学习·数据挖掘·开源