博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【LeetCode】236. 二叉树的最近公共祖先
阅读量:2004 次
发布时间:2019-04-28

本文共 1269 字,大约阅读时间需要 4 分钟。

题目描述

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

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

例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]

示例 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。因为根据定义最近公共祖先节点可以为节点本身。

说明:

  • 所有节点的值都是唯一的。
  • p、q 为不同节点且均存在于给定的二叉树中。

代码

/** * 时间复杂度:O(n) 每个节点最多就遍历一次 * 空间复杂度:O(n) 用到栈空间 */class Solution {    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {        if(root == null)            return null;        if(p == root || q == root)            return root;        TreeNode left = lowestCommonAncestor(root.left, p, q);        TreeNode right = lowestCommonAncestor(root.right, p, q);        if(left == null && right == null)            // 根节点为空,公共祖先便为空            return null;        else if(left != null && right != null)            // 左右两边各一个节点,那root一定是p、q的公共祖先            return root;        else if(left == null)            // 左子树为空,那就只用看右子树的根            return right;        else if(right == null)            // 右子树为空,那就只用看左子树的根            return left;                // 因为函数的返回值是TreeNode,最后一定要return        return null;           }}

转载地址:http://flatf.baihongyu.com/

你可能感兴趣的文章
前端权限控制:获取用户信息接口构造数据
查看>>
有状态服务和无状态服务
查看>>
七牛云存储:断点续传
查看>>
字节流复制文本文件【应用】
查看>>
字节流复制图片
查看>>
其他数字摘要算法实现
查看>>
私钥加密私钥解密
查看>>
锁的释放流程-ReentrantLock.unlock
查看>>
Java判断字符串是否为数字(浮点类型也包括)
查看>>
Err:11 https://developer.download.nvidia.cn/compute/cuda/repos/ubuntu2004/x86_64 Packages 404 No
查看>>
ubuntu opencv-python 安装很慢问题
查看>>
MySQL5.7版本修改了my.ini配置文件后mysql服务无法启动问题
查看>>
【大数据开发】Java基础 -总结21-Hashmap和HashTable的区别
查看>>
Exception in thread “main“ java.sql.SQLException错误之一: Column Index out of range, 0 < 1.
查看>>
C3p0连接池连接mysql出现: com.mchange.v2.resourcepool.BasicResourcePool
查看>>
Azkaban体系结构
查看>>
机器学习之重头戏-特征预处理
查看>>
synchronized底层实现及锁的升级、降级
查看>>
PermGen space-永久区内存溢出
查看>>
Maven继承和聚合
查看>>