LeetCode hot100-49-N

java 复制代码
236. 二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

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

有一种淡淡的死感,二叉树递归反正是越刷越绝望,完完全全的门外汉背题。

官方答案也看不懂,而且写得一般。

在看到一个好的解答,图画得很好,大概理解每一步是怎么返回了

https://zhuanlan.zhihu.com/p/269251274

但是他是写的C/C++版本,我根据这个思路改成Java。大概是这样的

java 复制代码
class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if (root == null || root == p || root == q) {
            return root;
        }
        root.left = lowestCommonAncestor(root.left, p, q);
        root.right = lowestCommonAncestor(root.right, p, q);
        if (root.left != null && root.right != null) {
            return root;
        }
        return root.left == null ? root.right : root.left;
    }
}
相关推荐
嵌入式老牛5 分钟前
第13章 图像处理之Harris角点检测算法(二)
图像处理·opencv·算法·计算机视觉
渡我白衣6 分钟前
哈希的暴力美学——std::unordered_map 的底层风暴、扩容黑盒与哈希冲突终极博弈
java·c语言·c++·人工智能·深度学习·算法·哈希算法
zl_vslam10 分钟前
SLAM中的非线性优-3D图优化之相对位姿Between Factor(六)
前端·人工智能·算法·计算机视觉·slam se2 非线性优化
budingxiaomoli24 分钟前
算法--位运算
算法
熊猫_豆豆29 分钟前
基于A*算法的雷雨绕飞路径MATLAB实现
算法·matlab·航天·a星算法
_F_y33 分钟前
二分:山脉数组的峰顶索引、寻找峰值、寻找旋转排序数组中的最小值、点名
c++·算法
Elias不吃糖36 分钟前
克隆图(LeetCode 133)——用数组做映射的 DFS 解法
c++·算法·leetcode·深度优先
iiiiii111 小时前
【论文阅读笔记】IDAQ:离线元强化学习中的分布内在线适应
论文阅读·人工智能·笔记·学习·算法·机器学习·强化学习
秋深枫叶红1 小时前
嵌入式第二十三篇——数据结构基本概念
linux·数据结构·学习·算法
Zsy_0510031 小时前
【数据结构】二叉树介绍及C语言代码实现
c语言·数据结构·算法