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

题目描述:

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

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

题目解答:

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。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-16 20:32:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-16 20:32:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-16 20:32:06       82 阅读
  4. Python语言-面向对象

    2024-01-16 20:32:06       91 阅读

热门阅读

  1. AS,android SDK

    2024-01-16 20:32:06       50 阅读
  2. 1月16日,每日信息差

    2024-01-16 20:32:06       49 阅读
  3. A. Tricky Sum

    2024-01-16 20:32:06       55 阅读
  4. etcd数据备份数据恢复数据压缩碎片整理

    2024-01-16 20:32:06       48 阅读
  5. CF1920 D. Array Repetition [细节规律题]

    2024-01-16 20:32:06       56 阅读
  6. 字符串和整型转换的那些事儿

    2024-01-16 20:32:06       57 阅读
  7. 边缘计算的挑战和机遇

    2024-01-16 20:32:06       47 阅读