【LeetCode笔记】剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(Java、二叉树、dfs)

文章目录

  • 思路 & 代码
  • 代码 & 思路
      • 二刷

思路 & 代码

  • 应该在二叉树的最近公共祖先之前写= =
  • 需要用到二叉搜索树的特性
    在这里插入图片描述
    在这里插入图片描述

代码 & 思路

  • 分成四种情况即可,具体见代码注释
  • 时间复杂度 O(logn)
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {// 1. 为p | q的情况if(root == p || root == q){return root;}// 2. p & q 都小于 root,转换在左子树找if(p.val < root.val && q.val < root.val){return lowestCommonAncestor(root.left, p, q);}// 3. 都大于,转换右子树找if(p.val > root.val && q.val > root.val){return lowestCommonAncestor(root.right, p, q);}// 4. 一个大一个小,root 就是答案return root;}
}
  • 来个清晰版本的代码
class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root == p || root == q){return root;}if(p.val < root.val && q.val < root.val){return lowestCommonAncestor(root.left, p, q);}if(p.val > root.val && q.val > root.val){return lowestCommonAncestor(root.right, p, q);}return root;}
}

二刷

  • 注意:与二叉树的最近公共祖先不同,这里可以利用二叉搜索树的性质
  • 当然,用二叉树来的方法也可以。
class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root == p || root == q) {return root;}if(p.val < root.val && q.val < root.val) {return lowestCommonAncestor(root.left, p, q);}else if(p.val > root.val && q.val > root.val) {return lowestCommonAncestor(root.right, p, q);}return root;}
}

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

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

相关文章

python类属性和实例属性_Python 类属性与实例属性,类对象与实例对象用法分析...

本文实例讲述了Python 类属性与实例属性&#xff0c;类对象与实例对象用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;demo.py&#xff08;类属性&#xff0c;所有实例对象共用类属性&#xff09;&#xff1a; # 定义工具类 继承object是为了兼容python2.x class …

【LeetCode笔记】剑指 Offer 65. 不用加减乘除做加法(Java、位运算、二刷)

文章目录题目描述思路 & 代码二刷题目描述 讲道理&#xff0c;感觉算有点难度的题目了 &#xff0c;还是需要时不时看看。 思路 & 代码 正负数情况可以不考虑&#xff08;补码&#xff09;核心&#xff1a;加法 进位和 非进位和关于位运算符的选择&#xff0c;le…

【LeetCode笔记】剑指 Offer 62. 圆圈中最后剩下的数字(Java、约瑟夫环、链表)

文章目录题目描述思路 & 代码链表模拟法数学方法二刷题目描述 约瑟夫环&#xff01;题目可太经典了说实话还是有点难度的 思路 & 代码 链表模拟法 第一想法是用 LinkedList&#xff0c;但是会超时&#xff0c;于是选择ArrayList关键在于 index (index m - 1) %…

python怎么画参数函数图像_详解pandas.DataFrame.plot() 画图函数

首先看官网的DataFrame.plot( )函数 DataFrame.plot(xNone, yNone, kindline, axNone, subplotsFalse, sharexNone, shareyFalse, layoutNone,figsizeNone, use_indexTrue, titleNone, gridNone, legendTrue, styleNone, logxFalse, logyFalse, loglogFalse, xticksNone, ytick…

【学习笔记】第一章——操作系统的概念、功能、特征、发展分类(系统调用、并发共享虚拟异步)

文章目录一. 概念、功能与目标定义&#xff1a;功能1. 系统资源的管理者2. 用户和计算机硬件之间的接口3. 最接近硬件的层次二. 特征1. 并发2. 共享3. 虚拟4. 异步三. 发展分类1. 手工操作阶段2. 单道批处理系统3. 多道批处理系统4. 分时操作系统5. 实时操作系统总结一. 概念、…

【学习笔记】第一章——操作系统的运行机制、体系结构和内核(核心态、原语、大内核 微内核、特权指令)

文章目录总览一. 运行机制&#xff1a;1. 指令2. 处理器状态3. 程序二. 内核1. 定义2. 在层次结构中的划分三. 体系结构总览 重要知识点&#xff1a;特权指令 & 内核程序&#xff0c;只能在核心态执行 一. 运行机制&#xff1a; 1. 指令 指令&#xff1a;CPU 能识别、…

计算机视觉中的多视图几何_基于深度学习的视觉三维重建研究总结

三维重建意义三维重建作为环境感知的关键技术之一&#xff0c;可用于自动驾驶、虚拟现实、运动目标监测、行为分析、安防监控和重点人群监护等。现在每个人都在研究识别&#xff0c;但识别只是计算机视觉的一部分。真正意义上的计算机视觉要超越识别&#xff0c;感知三维环境。…

【学习笔记】第一章——操作系统的中断和异常

文章目录总览一. 诞生、概念和作用二. 分类三. 外中断的处理过程四. 导图总结总览 异常&#xff1a;内中断 一. 诞生、概念和作用 早期计算机&#xff0c;程序只能串行执行&#xff0c;资源利用率低&#xff08;详可见OS 发展分类&#xff09;&#xff0c;为了解决这一问题…

【学习笔记】第一章——操作系统的系统调用(陷入指令、库函数、作用流程)

文章目录总览一. 定义与作用定义作用分类二. 系统调用和库函数的区别三. 系统调用背后的过程导图总结总览 面试常考题了&#xff0c;可得好好看看 XD 一. 定义与作用 定义 作用 结合下图例子理解按照我的理解&#xff0c;就是需要调用系统资源时&#xff0c;需要让 OS 来保…

【学习笔记】第二章——进程的定义、组成、组织方式、特征、状态 转换

文章目录1. 定义 & 组成2. 进程的组织3. 特征1、2、3 总结导图4. 状态5. 转换4、5 总结导图1. 定义 & 组成 一般直接把进程实体称为进程&#xff0c;但是严格来说进程实体强调静态&#xff0c;而进程强调动态。PCB&#xff08;Process Control Block&#xff09;是进程…

派生类构造的时候一定要调用_没钱的时候,一定要记住这三个教训

越没钱的时候&#xff0c;才更能认清身边的一些人和事&#xff0c;当你没钱的时候&#xff0c;一定要知道这三件事&#xff0c;这是现实也是事实啊。【1】没钱才发现钱有多重要人越在没钱的时候&#xff0c;越会发现钱是多么的重要&#xff0c;生活中大多数人的烦恼就是因为没有…

【学习笔记】第二章——进程的控制、通信

文章目录一. 进程控制如何实现进程控制创建终止阻塞 & 唤醒切换总结二. 进程间的通信定义1&#xff09;共享存储2&#xff09;管道通信3&#xff09;信息传递总结一. 进程控制 def: 实现进程状态转换 如何实现进程控制 主要就是 PCB、阻塞\就绪队列以及系统资源之间的改…

bcp 不能调用where 子句_技术分享 || Mysql中IS NULL、IS NOT NULL不能走索引?

mysql中IS NULL、IS NOT NULL不能走索引&#xff1f;不知道是啥原因也不知道啥时候, 江湖上流传着这么一个说法 mysql查询条件包含IS NULL、IS NOT NULL、!、like %* 、like %*%, 不能 使用索引查询&#xff0c; 只能 使用全表扫描。刚入行时我也是这么认为的&#xff0c;还奉为…

【学习笔记】第二章——线程与多线程模型

文章目录一. 线程为什么要引入线程&#xff1a;引入进程后的变化线程的属性线程的实现二. 多线程模型1. 多对一模型2. 一对一模型3. 多对多模型三. 总结一. 线程 为什么要引入线程&#xff1a; 有的进程可能要“同时进行很多事”&#xff08;如QQ的语音、视频、文件处理等&am…

ghelper失效_Ghelper账号+网易云音乐领黑胶会员35天

点击蓝字关注我们&#xff0c;了解更多 追求美好的生活Ghelper账号 :账号&#xff1a;yiyaniosfx.cn密码&#xff1a;yiyanyiyan网易云&#xff1a;打开网易云音乐APP->顶部直播->随便进一个直播->右下角黑胶VIP领取->在次日1点后观看直播可领7天黑胶VIP->每天…

python利用tensorflow识别圆_RaspberryPi上实现佩戴口罩识别——2020电赛F题小记

今年的电赛题目非常反常&#xff0c;传统控制题目基本没有&#xff0c;新增加了测距题目&#xff0c;甚至物联网题目&#xff0c;Ai题目都出来了。直接电赛变算法钞能力大赛。看到F题&#xff1a;测温人脸识别&#xff0c;碰巧我们手头有调好的红外测温模块树莓派openmv&#x…

exchange邮件服务器_基于Spring Boot快速实现发送邮件功能

邮件在项目中经常会被用到&#xff0c;比如用邮件发送通知。比如&#xff0c;通过邮件注册、认证、找回密码、系统报警通知、报表信息等。本篇文章带大家通过SpringBoot快速实现一个发送邮件的功能。 邮件协议 下面先简单了解一下常见的邮件协议。常用的电子邮件协议有SMTP、PO…

redis序列化_SpringBoot整合redis

redis是最常用的缓存数据库&#xff0c;常用于存储用户登录token、临时数据、定时相关数据等。redis是单线程的&#xff0c;所以redis的操作是原子性的&#xff0c;这样可以保证不会出现并发问题。redis基于内存&#xff0c;速度非常快&#xff0c;据测试&#xff0c;redis读的…

spring cloud alibaba_SpringCloudAlibaba与Cloud搭配方案

一 简介Spring Cloud Alibaba致力于提供微服务开发一站式解决方案。此项目包括开发分布式应用微服务的必需组件&#xff0c;方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。依托 Spring Cloud Alibaba&#xff0c;你只需要添加一些注解和少量配置…

php curl header_PHP中的yield与协程(二十一节)

大家好&#xff0c;我是老李。顺风说骚话&#xff0c;逆风讲道理最近在大家一起努力下&#xff0c;那个沙雕肺炎患病人数增长率下降了不少&#xff0c;总体来说还算顺&#xff0c;所以今天这篇注定又要骚话连篇了。听说最近不少玉米开始向大连、威海、烟台方向涌入&#xff0c;…