LeetCode:236. 二叉树的最近公共祖先

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的!
代码随想录
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

后序遍历,如果在子树中找到了pq节点则向上返回当前节点,否则返回null

java 复制代码
	public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if(root == null) return null;
        if(root == p || root == q) return root;

        // 左
        TreeNode left = lowestCommonAncestor(root.left, p, q);

        //右
        TreeNode right = lowestCommonAncestor(root.right, p, q);

        // 中
        if(left != null && right != null){
            return root;
        }else if(left != null && right == null){
            return left;
        }else if(left == null && right != null){
            return right;
        }else{
            return null;
        }
    }
相关推荐
茶猫_11 小时前
C++学习记录-旧题新做-链表求和
数据结构·c++·学习·算法·leetcode·链表
毕设源码-朱学姐11 小时前
【开题答辩全过程】以 日程管理系统为例,包含答辩的问题和答案
java
yuniko-n12 小时前
【牛客面试 TOP 101】链表篇(一)
数据结构·算法·链表·面试·职场和发展
a努力。12 小时前
京东Java面试被问:双亲委派模型被破坏的场景和原理
java·开发语言·后端·python·面试·linq
小毛驴85012 小时前
Maven同时配置阿里云仓库和私有仓库
java·阿里云·maven
2501_9418053112 小时前
从微服务网关到统一安全治理的互联网工程语法实践与多语言探索
前端·python·算法
刘975312 小时前
【第25天】25c#今日小结
java·开发语言·c#
源代码•宸12 小时前
Leetcode—1161. 最大层内元素和【中等】
经验分享·算法·leetcode·golang
不如打代码KK12 小时前
Springboot如何解决跨域问题?
java·spring boot·后端
豆沙沙包?12 小时前
2026年--Lc330-394. 字符串解码(栈)--java版
java·开发语言