[leetcode hot150]第二百三十六题,二叉树的最近公共祖先

题目:
 

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

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

 可以使用递归的方式来解决这个问题。递归函数的基本思路是:

  1. 如果当前节点为空,返回null
  2. 如果当前节点就是其中一个目标节点,返回当前节点
  3. 分别在左子树和右子树中查找目标节点
  4. 如果左右子树都找到了目标节点,说明当前节点就是最近公共祖先,返回当前节点
  5. 如果只在左子树找到了一个目标节点,返回左子树的结果
  6. 如果只在右子树找到了一个目标节点,返回右子树的结果

 这个leetcode官方题解下面的树很正确的具象化了这个题的任务。

下面附上代码:
 

public class no_236 {public static void main(String[] args) {Integer[] input = {3, 5, 1, 6, 2, 0, 8, null, null, 7, 4};TreeNode root = TreeNode.buildTree(input);int p = 5, q = 1;TreeNode treeNode = lowestCommonAncestor(root, root.left, root.right);System.out.println(treeNode.val);}public static TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if (root == null || 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;}if (left != null) {return left;}if (right != null) {return right;}return null;}
}

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

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

相关文章

【C++】前缀和:一维前缀和

1.题目 2.算法思路 如果暴力求解的话,时间复杂度为O(n*q)。一定会超时。 优化的思路也很简单,就是得到一个求和数组arr,使arr[i]a1a2...ai。 然后每次求l到r之间的数时,直接arr[r]-arr[l-1]就可以得出! 这样&#…

在宝塔centos7中使用pyenv,配置虚拟环境

安装pyenv 首先确认你当前python版本 确保 yum 使用 Python 2 alternatives --set python /usr/bin/python2这个命令将系统默认的Python版本设置为Python 2 安装python3,venv sudo dnf install python3-venv如果没有dnf: yum install python3手动安装必要的软件包 curl …

从GPT-3.5到GPT-4O:探索AI的进化之旅,哪一版更懂你?

如何评价GPT-4o? 最新的GPT-4O,被誉为GPT-4的增强版。它在保持前代产品优秀性能的基础上,大幅降低了使用成本,使得更多的普通用户也能享受到顶尖AI的服务。GPT-4O在非英语语言处理上的强化,更是让其在全球范围内的适用性大大提高…

Linux 编译器gcc/g++使用

gcc/g同理 编译器运行过程 1. 预处理(进行宏替换) gcc -E a.c -o a.i 预处理后还是c语言 -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面 告诉gcc,从现在开始进行程序的翻译,将预处理工作做完停下 2. 编译&#x…

【RSGIS数据资源】1981-2021年中国陆地生态系统蒸腾蒸散比数据集

文章目录 摘要基本信息数据结构和内容采集方法信息数据处理方法与数据质量 摘要 本数据集涵盖了中国陆地生态系统蒸腾蒸散比(T/ET)、蒸腾(T)及蒸散(ET)三组数据。基于模型-数据融合方法,集成PT…

树与图的深度优先遍历

数和图的存储方式与遍历 数和图的存储方式: 一般有两种 树是一种特殊的图(即无环联通图)。所以下面只讲图。 图的话分为两种:①有向图(边是有方向的:a➡️b)和 ②无向图(边是无方…

HNU-计算机体系结构-实验2-Tomasulo算法

计算机体系结构 实验2 计科210X 甘晴void 202108010XXX 1 实验目的 熟悉Tomasulo模拟器同时加深对Tomasulo算法的理解,从而理解指令级并行的一种方式-动态指令调度。 掌握Tomasulo算法在指令流出、执行、写结果各阶段对浮点操作指令以及load和store指令进行什么…

AWS存储之Backup

AWS Backup是一项经济高效、完全托管且基于策略的服务,可简化大规模数据保护。它是亚马逊提供的一项全面的备份服务,可用于备份和恢复AWS中的各种数据,包括Amazon EBS卷、Amazon RDS数据库、Amazon DynamoDB等。 AWS Backup 是一项完全托管的…

网络融合的力量:企业如何通过“一网多用”提升业务效率

随着企业业务的不断扩展,网络需求变得日益复杂。需要的是一种能够统一承载办公、生产、销售和运营等多业务需求的网络架构。这种“一网多用”的架构,不仅简化了网络部署和管理,还提升了效率并降低了成本。 “一网多用”架构的实际应用&#x…

Guns框架:基于主流技术Spring Boot2 + Vue3 + Antd Vue的现代Java应用开发新纪元

Guns框架:基于主流技术Spring Boot2 Vue3 Antd Vue的现代Java应用开发新纪元 摘要:随着信息技术的飞速发展,软件开发框架在提升开发效率、降低成本方面扮演着至关重要的角色。Guns框架,作为一个现代化的Java应用开发框架&#x…

微信图片识别文字怎么弄?介绍三个识别方法

微信图片识别文字怎么弄?在信息爆炸的时代,我们每天都会接触到大量的图片信息,其中包含的文字内容往往是我们获取信息的重要途径。然而,手动输入图片中的文字既费时又费力,这时,一款能够准确识别微信图片中…

学习笔记——动态路由协议——OSPF(OSPF基本术语)

OSPF基本术语 1、链路状态(LS)与链路状态通告(LSA) 链路(LINK):路由器上的一个接口。 状态(State):描述接口以及其与邻居路由器之间的关系。 (1)链路状态(LS) OSPF是一种链路状态协议,所谓的链路状态,其实就是路由器的接口状态…

vue中axios的使用

1.get请求 axios.get(http://127.0.0.1:2333/show_course, {params: {param: choice} }) .then((response) > {this.list response.data; }) .catch((error) > {console.error(error); }); 2.post请求:当需要向服务器提交数据以创建新资源时使用。例如&…

Java程序中,不同jar包,有2个完全相同的类,运行时的加载顺序

在Java程序中,如果有两个完全相同的类存在于不同的jar包中,那么在运行时究竟加载哪个类,主要取决于类加载器的类路径(Classpath)搜索顺序。 Java使用类加载器(ClassLoader)来动态加载类。当Jav…

JS导出excel功能

在JavaScript中可以使用第三方库来实现导出Excel的功能&#xff0c;比如使用xlsx库。以下是一个简单的示例&#xff1a; 首先&#xff0c;在html文件中引入xlsx库&#xff1a; <script src"https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.16.9/xlsx.full.min.js"…

QGIS开发笔记(三):Windows安装版二次开发环境搭建(下):将QGis融入QtDemo,添加QGis并加载tif遥感图的Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/139136356 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

29-ESP32-S3-WIFI篇-00 STA模式扫描全部 AP

ESP32-S3 WIFI_Driver 引言 ESP32-S3是一款集成了Wi-Fi和蓝牙功能的芯片。关于WIFI的部分&#xff0c;其实内容比我想象的要多得多。所以通常来说&#xff0c;如果你想要编写自己的Wi-Fi应用程序&#xff0c;最快捷的方法就是先找一个类似的示例应用&#xff0c;然后将它的相…

实战项目:飞机坦克大战 —— 面向对象编程之旅

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、项目概览与背景介绍 二、面向对象编程基本概念解析 1. 类与对象 2. 构造函数与属性封…

Java对象的揭秘

前言 作为一个 Java 程序员&#xff0c;我们在开发中最多的操作要属创建对象了。那么你了解对象多少&#xff1f;它是如何创建&#xff1f;如何存储布局以及如何使用的&#xff1f;本文将对 Java 对象进行揭秘&#xff0c;以及讲解如何使用 JOL 查看对象内存使用情况。 本文是基…

【JavaScript脚本宇宙】从jQuery到Popmotion:DOM操作和动画库

揭秘流行JavaScript库&#xff1a;从简单操作到复杂动画 前言 随着Web技术的发展&#xff0c;JavaScript库已成为开发人员日常工作中不可或缺的工具。本文将探讨六种流行的JavaScript库&#xff0c;涵盖其概述、主要特性、使用示例及使用场景等多个方面。 欢迎订阅专栏&#…