Leetcode236 二叉树两节点的最近公共祖先

问题描述:

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

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

解题思路:

注意此题的前置条件是一定有公共祖先,所以可以先判断当前节点是不是祖先,如果是,则继续往下找左右子树,如果左右子树中,有一边找到的公共祖先不存在,直接返回另一边子树中的查找结果,否则返回当前根节点

代码实现

java 复制代码
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        // 1. 先看根节点是不是祖先
        if (root == null || root == p || root == q) {
            return root;
        }

        // 2. 如果根节点是祖先,有没有更近的祖先呢
        // 看看左子树
        TreeNode left = lowestCommonAncestor(root.left, p, q);
        // 看看右子树
        TreeNode right = lowestCommonAncestor(root.right, p, q);

        // 3. 如果有的话显然只会在一侧 判断一下
        if (left == null) {
            return right;
        }
        if (right == null) {
            return left;
        }

        // 4. 如果没有更近的,默认还是返回root
        return root;

    }
相关推荐
penguin_bark几秒前
LCR 068. 搜索插入位置
算法·leetcode·职场和发展
一丝晨光4 分钟前
Java、PHP、ASP、JSP、Kotlin、.NET、Go
java·kotlin·go·php·.net·jsp·asp
罗曼蒂克在消亡8 分钟前
2.3MyBatis——插件机制
java·mybatis·源码学习
_GR19 分钟前
每日OJ题_牛客_牛牛冲钻五_模拟_C++_Java
java·数据结构·c++·算法·动态规划
ROBIN__dyc31 分钟前
表达式
算法
无限大.32 分钟前
c语言200例 067
java·c语言·开发语言
余炜yw34 分钟前
【Java序列化器】Java 中常用序列化器的探索与实践
java·开发语言
攸攸太上34 分钟前
JMeter学习
java·后端·学习·jmeter·微服务
无限大.35 分钟前
c语言实例
c语言·数据结构·算法
Kenny.志37 分钟前
2、Spring Boot 3.x 集成 Feign
java·spring boot·后端