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

相关推荐
小白|几秒前
OpenHarmony + Flutter 混合开发深度实践:构建支持国密算法(SM2/SM3/SM4)与安全存储的金融级应用
算法·安全·flutter
不能只会打代码几秒前
蓝桥杯---垒骰子(Java实现,代码注释,图文讲解)
算法·蓝桥杯·动态规划·垒骰子
数据门徒9 分钟前
《人工智能现代方法(第4版)》 第9章 一阶逻辑中的推断 学习笔记
人工智能·笔记·学习·算法
喜欢吃燃面10 分钟前
算法竞赛之排序算法
c++·学习·算法
秋深枫叶红13 分钟前
嵌入式第三十篇——数据结构——哈希表
数据结构·学习·算法·哈希算法
Keep__Fighting17 分钟前
【机器学习:决策树】
人工智能·算法·决策树·机器学习·scikit-learn
✎ ﹏梦醒͜ღ҉繁华落℘27 分钟前
编程基础--数据结构
数据结构·算法
小毅&Nora28 分钟前
【后端】【C++】泛型算法:从传统到C++20 Ranges的进化之旅
算法·c++20·泛函算法
mifengxing28 分钟前
B树的定义以及插入和删除
数据结构·b树
ULTRA??32 分钟前
最小生成树kruskal算法实现python,kotlin
人工智能·python·算法