二叉树的最近公共祖先(算法村第八关黄金挑战)

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

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

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

示例 1:

img

输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
输出:3
解释:节点 5 和节点 1 的最近公共祖先是节点 3

示例 2:

img

输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
输出:5
解释:节点 5 和节点 4 的最近公共祖先是节点 5 。因为根据定义最近公共祖先节点可以为节点本身。

提示:

  • 树中节点数目在范围 [2, 105] 内。
  • -109 <= Node.val <= 109
  • 所有 Node.val 互不相同
  • p != q
  • pq 均存在于给定的二叉树中。

后序遍历+回溯

自底向上查找,有点难度! | LeetCode:236. 二叉树的最近公共祖先_哔哩哔哩_bilibili

public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q)
{//递归结束条件:(1)触底.(2)找到p或qif (root == null || root == p || root == q)return root;//后序遍历:左右中TreeNode left = lowestCommonAncestor(root.left, p, q);TreeNode right = lowestCommonAncestor(root.right,p, q);//回溯// 如果左右子树都不为空,即都存在p、q,则root就是最近的公共祖先,返回rootif (left != null && right != null)return root;// 如果左子树不为空,右子树为空,则说明p或q在左子树中。返回左子树else if(left != null)return left;// 如果左子树为空,右子树不为空,则说明p或q在右子树中。返回右子树else if (right != null)return right;// 如果左右子树都为空,则说明p或q既不在左子树中也不在右子树中。返回nullelsereturn null;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/339352.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

了解SSL证书、APNs证书、Jamf Push Proxy证书

在Jamf Pro内会涉及到SSL证书、APNs证书、Jamf Push Proxy证书&#xff0c;每一个证书都有其各自的作用和有效期&#xff0c;下面我们来详细了解一下。 SSL证书 Jmf Pro需要有效的SSL证书来确保计算机和移动设备是与Jamf Pro服务器通信&#xff0c;而不是冒名顶替的服务器。Jam…

css-文本垂直居中, 左侧border与文字作为导航标题

1.文本垂直居中 1.1 Flexbox 布局 <!DOCTYPE html> <html lang"en"> <head><style>.container {display: flex;align-items: center; /* 使用 align-items 属性垂直居中 */height: 200px; /* 设置容器高度 */border: 1px solid #ccc;}</…

深度学习目标跟踪简述

深度学习目标跟踪是一个活跃的研究领域&#xff0c;它涉及使用深度学习技术来跟踪视频或实时摄像头中的对象。这个领域通常包括以下几个关键方面&#xff1a; 目标检测&#xff1a;在开始跟踪前&#xff0c;首先需要在视频的初始帧中检测到目标。这通常是通过卷积神经网络&…

【SpringMVC快速使用】1.@RestController @RequestMapping 2.logback的使用

背景&#xff1a;为何从这个最简单的 例子写起呢&#xff1f; 那是因为我们的管理后台之类的都是别人写的&#xff0c;我也听说了大家说&#xff1a;只用Post请求就足够了&#xff0c;但是却发现&#xff0c;在浏览器中测试时&#xff0c;默认是GET请求&#xff0c;如果直接写…

C++内存管理机制(侯捷)笔记1

C内存管理机制&#xff08;侯捷&#xff09; 本文是学习笔记&#xff0c;仅供个人学习使用。如有侵权&#xff0c;请联系删除。 参考链接 Youtube: 侯捷-C内存管理机制 Github课程视频、PPT和源代码: https://github.com/ZachL1/Bilibili-plus 第一讲primitives的笔记 截至…

十二、QProgressBar的简单使用与样式优化(Qt5 GUI系列)

目录 一、设计需求 二、实现代码 三、代码解析 四、总结 五、扩展(自定义QProgressBar样式) 一、设计需求 在很多应用程序中&#xff0c;在执行费时操作时都会展示一个进度条来展示操作进行的进度。常见的场景&#xff0c;如&#xff1a;拷贝操作、安装操作以及卸载操作。…

Talk|斯坦福大学史浩辰:学习结构化世界模型用于现实世界中柔性物体的操控

本期为TechBeat人工智能社区第562期线上Talk。 北京时间1月10日(周三)20:00&#xff0c;斯坦福大学博士生—史浩辰的Talk已准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “学习结构化世界模型用于现实世界中柔性物体的操控”&#xff0c;介绍了他的团队在…

RHCE9学习指南 第19章 网络时间服务器

19.1 时间同步的必要性 对于一些服务来说对时间要求非常严格&#xff0c;例如&#xff0c;图19-1所示由三台服务器搭建的ceph集群。 图19-1 三台机器搭建的集群对时间要求比较高 这三台服务器的时间必须要保持一样&#xff0c;如果不一样&#xff0c;就会显示报警信息。那么…

Docker安装Nacos2.2.3并鉴权、Prometheus监听Nacos、Grafana监控Nacos【亲测可用】

1、Docker 拉取镜像&#xff1a;docker pull nacos/nacos-server:v2.2.3 2、docker run --env MODEstandalone --name nacos -d -p 8848:8848 -p 9848:9848 -p 9849:9849 nacos/nacos-server:v2.2.3 3、复制镜像中的配置文件 mkdir -vp /home/nacos/logs mkdir -vp /home/n…

docker 安装 zookeeper ( 亲测有效 )

目录 1 安装2 验证 1 安装 上传 zookeeoer.tar 包 到服务器 上传之后tar 包&#xff0c;将他变成镜像 输入docker images,发现目前是没有镜像的&#xff0c;现在将tar 包变成镜像 docker load -i zookeeper.tar因为我们要使用 Docker-compose 去管理容器&#xff0c;所以要使…

Transformer如何工作

Transformer如何工作 Transformer工作可以分为两个阶段&#xff1a;Inference&#xff08;推理&#xff09;和Training&#xff08;训练&#xff09; ​ ​​​ ‍ ‍

全网最详细mysql5.7安装(保姆级别)

文章目录 数据库MySQL5.7安装包安装环境变量配置检测是否安装配置成功MySQL 启动和关闭 数据库 概念&#xff1a;数据库&#xff08;DataBase&#xff09;简称&#xff1a;DB 用于存储和管理数据的仓库 数据库的特点 1、持久化存储数据&#xff0c;其实数据库就是一个文件系统…