力扣-236.二叉树的最近公共祖先

题目描述

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

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

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

小结:题目看起来简单,实则非常不好理解,后序遍历保证顺序,找到之后向上返回,这题直接记住算了,写不下去了,无语。

相关推荐
xlq2232221 分钟前
29.哈希(下)
算法·哈希算法·散列表
阿昭L21 分钟前
leetcode链表是否有环
算法·leetcode·链表
yaoh.wang29 分钟前
力扣(LeetCode) 83: 删除排序链表中的重复元素 - 解法思路
程序人生·算法·leetcode·链表·面试·职场和发展
阿昭L34 分钟前
leetcode旋转链表
算法·leetcode·链表
山楂树の35 分钟前
有效的括号(栈)
数据结构·算法
im_AMBER35 分钟前
Leetcode 81 【滑动窗口(定长)】
数据结构·笔记·学习·算法·leetcode
xu_yule40 分钟前
算法基础(背包问题)-完全背包
c++·算法·动态规划·完全背包
x9766642 分钟前
使用 HMAC-SHA256算法对MCU UID进行加密
单片机·嵌入式硬件·算法
gfdhy43 分钟前
【c++】素数详解:概念、定义及高效实现(判断方法 + 筛法)
开发语言·c++·算法·数学建模·ai编程
Swift社区1 小时前
LeetCode 452 - 用最少数量的箭引爆气球
算法·leetcode·职场和发展