(leetcode学习)236. 二叉树的最近公共祖先

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

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

示例 1:

复制代码
输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
输出:3
解释:节点 5 和节点 1 的最近公共祖先是节点 3 。

示例 2:

复制代码
输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
输出:5
解释:节点 5 和节点 4 的最近公共祖先是节点 5 。因为根据定义最近公共祖先节点可以为节点本身。

示例 3:

复制代码
输入:root = [1,2], p = 1, q = 2
输出:1

提示:

  • 树中节点数目在范围 [2, 105] 内。
  • -109 <= Node.val <= 109
  • 所有 Node.val 互不相同
  • p != q
  • pq 均存在于给定的二叉树中。

跟着左神的视频课,参考了左神的解题方法,不过时间上打败30%,记录一下,以后提升。

cpp 复制代码
TreeNode* find(TreeNode* cur){
        if(cur == NULL) return NULL;
        if(cur == Gp || cur == Gq) return cur;
        TreeNode* left = find(cur->left);
        TreeNode* right = find(cur->right);
        if(left != NULL && right != NULL){
            return cur;
        }
        return left == NULL ? right : left;
    }
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        Groot = root;
        Gp = p;
        Gq = q;
        return find(root);
    }

一样的代码又提交了一遍,时间反而变少了,真的神奇

相关推荐
Proxy_ZZ04 分钟前
用Matlab绘制BER曲线对比SPA与Min-Sum性能
人工智能·算法·机器学习
黎阳之光4 分钟前
黎阳之光:以视频孪生领跑全球,赋能数字孪生水利智能监测新征程
大数据·人工智能·算法·安全·数字孪生
小李子呢021126 分钟前
前端八股6---v-model双向绑定
前端·javascript·算法
XH华29 分钟前
数据结构第九章:树的学习(下)
数据结构·学习
2301_822703201 小时前
Flutter 框架跨平台鸿蒙开发 - 创意声音合成器应用
算法·flutter·华为·harmonyos·鸿蒙
cmpxr_2 小时前
【C】数组名、函数名的特殊
c语言·算法
KAU的云实验台2 小时前
【算法精解】AIR期刊算法IAGWO:引入速度概念与逆多元二次权重,可应对高维/工程问题(附Matlab源码)
开发语言·算法·matlab
会编程的土豆2 小时前
【数据结构与算法】再次全面了解LCS底层
开发语言·数据结构·c++·算法
aWty_3 小时前
实分析入门(1)--皮亚诺和自然数
学习