剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(java+python)

2023-11-11

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

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

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

在这里插入图片描述

示例 1:

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

示例 2:

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

说明:

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

java

/**
 * 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) {
        int pv=p.val;
        int qv=q.val;
        if(pv==root.val||qv==root.val)return root;
        if(pv>qv){
            int tmp=pv;
            pv=qv;
            qv=tmp;
        }
        while(true){
            if(pv>root.val)root=root.right;
            else if(qv<root.val)root=root.left;
            else return root;
        }
    }
}

python

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def lowestCommonAncestor(self, root, p, q):
        """
        :type root: TreeNode
        :type p: TreeNode
        :type q: TreeNode
        :rtype: TreeNode
        """
        pv,qv=p.val,q.val
        if pv==root.val or qv==root.val:
            return root
        if pv>qv:
            pv,qv=qv,pv
        while True:
            if pv>root.val:root=root.right
            elif qv<root.val:root=root.left
            else: return root
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(java+python) 的相关文章

  • 通过SOCKS代理连接Kafka

    我有一个在 AWS 上运行的 Kafka 集群 我想用标准连接到集群卡夫卡控制台消费者从我的应用程序服务器 应用程序服务器可以通过 SOCKS 代理访问互联网 无需身份验证 如何告诉 Kafka 客户端通过代理进行连接 我尝试了很多事情 包
  • 如何在 Firebase 远程配置中从 JSON 获取值

    我是 Android 应用开发和 Firebase 的新手 我想知道如何获取存储在 Firebase 远程配置中的 JSONArray 文件中的值 String 和 Int 我使用 Firebase Remote Config 的最终目标是
  • 是否有任何简单(且最新)的 Java 框架可用于在 Swing 应用程序中嵌入电影?

    我正在构建一个小型 Swing 应用程序 我想在其中嵌入一部电影 重要的是 这个应用程序是一个 WebStart 应用程序 并且该库应该能够打包在我启动的 jnlp 中 即 不依赖于本机库 我知道并尝试过 JMF 但我认为与其他框架相比 其
  • Spring Boot自动装配存储库始终为空[重复]

    这个问题在这里已经有答案了 每次我进入我的服务类时 存储库似乎都没有自动连接 因为它不断抛出 NullPointerException 谁能帮我检查一下我缺少什么吗 这是我的代码 演示应用程序 java package com exampl
  • 如何将 Mat (opencv) 转换为 INDArray (DL4J)?

    我希望任何人都可以帮助我解决这个任务 我正在处理一些图像分类并尝试将 OpenCv 3 2 0 和 DL4J 结合起来 我知道DL4J也包含Opencv 但我认为它没什么用 谁能帮我 如何转换成 INDArray 我尝试阅读一些问题here
  • 如何根据运行的 jar 的结果让我的 ant 任务通过或失败?

    我正在运行 CrossCheck 无浏览器 js 单元测试 作为 ant 脚本的一部分 如果 CrossCheck 测试失败 我希望 ant 报告失败 这是 build xml 中的相关部分
  • 什么时候可以在 Java 中使用 Thead.stop() ?

    Thread stop 的 Java 文档听起来好像如果您调用 Thread stop 世界就会终结 已弃用 这种方法本质上是不安全的 停止线程 Thread stop 导致它解锁所有已锁定的监视器 作为未经检查的 ThreadDeath
  • 使用 JUnit 时,有没有办法验证测试方法中是否调用了 try/catch 指令的 Catch 部分?

    例如 如果我想测试以下课程 public class SomeClass public void someMethod try Some code where comething could go wrong catch Exception
  • ConcurrentHashMap 内部是如何工作的?

    我正在阅读有关 Java 并发性的 Oracle 官方文档 我想知道Collection由返回 public static
  • Jackson XML ArrayList 输出具有两个包装器元素

    我在 Jackson 生成的 XML 输出中得到了两个包装器元素 我只想拥有一个 我有一个 Java bean Entity Table name CITIES JacksonXmlRootElement localName City pu
  • 自动生成Flyway的迁移SQL

    当通过 Java 代码添加新模型 字段等时 JPA Hibernate 的自动模式生成是否可以生成新的 Flyway 迁移 捕获自动生成的 SQL 并将其直接保存到新的 Flyway 迁移中 以供审查 编辑 提交到项目存储库 这将很有用 预
  • 套接字的读写如何同步?

    我们创建一个套接字 在套接字的一侧有一个 服务器 在另一侧有一个 客户端 服务器和客户端都可以向套接字写入和读取 这是我的理解 我不明白以下事情 如果服务器从套接字读取数据 它在套接字中是否只看到客户端写入套接字的内容 我的意思是 如果服务
  • 生成的序列以 1 开头,而不是注释中设置的 1000

    我想请求一些有关 Hibernate 创建的数据库序列的帮助 我有这个注释 下面的代码 在我的实体类中 以便为合作伙伴表提供单独的序列 我希望序列以 1000 开头 因为我在部署期间使用 import sql 将测试数据插入数据库 并且我希
  • 如何在 Spring 属性中进行算术运算?

  • 在 SWT/JFace RCP 应用程序中填充巨大的表

    您将如何在 SWT 表中显示大量行 巨大是指超过 20K 行 20 列的东西 不要问我为什么需要展示那么多数据 这不是重点 关键是如何让它尽可能快地工作 这样最终用户就不会厌倦等待 每行显示某个对象的实例 列是其属性 一些 我想使用 JFa
  • Docker 和 Eureka 与 Spring Boot 无法注册客户端

    我有一个使用 Spring Boot Docker Compose Eureka 的非常简单的演示 我的服务器在端口 8671 上运行 具有以下应用程序属性 server port 8761 eureka instance prefer i
  • “无法实例化活动”错误

    我的一个 Android 应用程序拥有大约 100 000 个用户 每周大约 10 次 我会通过 Google 的市场工具向我报告以下异常情况 java lang RuntimeException Unable to instantiate
  • Java中HashMap和ArrayList的区别?

    在爪哇 ArrayList and HashMap被用作集合 但我不明白我们应该在哪些情况下使用ArrayList以及使用时间HashMap 他们两者之间的主要区别是什么 您具体询问的是 ArrayList 和 HashMap 但我认为要完
  • 将 Apache Camel 执行器指标发送到 Prometheus

    我正在尝试转发 添加 Actuator Camel 指标 actuator camelroutes 将交换 交易数量等指标 发送到 Prometheus Actuator 端点 有没有办法让我配置 Camel 将这些指标添加到 Promet
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数

随机推荐

  • ASP.NET Core WebAPI学习-6

    ASP NET Core WebAPI学习 1 ASP NET Core WebAPI学习 2 ASP NET Core WebAPI学习 3 ASP NET Core WebAPI学习 4 ASP NET Core WebAPI学习 5
  • 数据结构——图的广度优先遍历(BFS)

    本文内图的存储方式是邻接矩阵 不过BFS的具体实现代码与图的存储结构无关 BFS的遍历方法 与树的层次遍历几乎一样 在实现树的层次遍历时 需要找到结点的所有子结点 在实现BFS时 需要找到该结点的所有邻接点 所以在实现BFS之前 需要先学习
  • VS2010 的卸载方法

    如何完全卸载VS2010 亲自体验过 1 首先用360卸载 当卸载完成后 提示有残余的话 就强力清除 PS 笔者使用专用卸载工具 IobitUninstaller 工具 此工具是单文件 免安装 它的特点是拥有360安全卫士 金山安全卫士 Q
  • 复制虚拟机后无法上网的问题

    1 背景 虚拟机用的是VMWare为了得到新的环境 而又不想每次都重装虚拟机 于是某天我复制了一台待机的虚拟机 然鹅它起来后却上不了网 无论我设了静态ip还是动态ip都不行 2 解决方法 问了下chatgpt 说是因为虚拟机的MAC地址冲突
  • 第十五章 AlibabaCloud微服务下的分布式配置中⼼

    1 微服务下的分布式配置中 现在微服务存在的问题 配置 件增多 不好维护 修改配置 件需要重新发布 什么是配置中 句话 统 管理配置 快速切换各个环境的配置 相关产品 百度的disconf 地址 https github com knigh
  • DolphinScheduler跨版本升级1.3.8至3.0.1

    DolphinScheduler跨版本升级1 3 8至3 0 1 Refer 背景 基础环境 依赖版本升级 修改pom xml 问题解决 MYSQL升级 1 文件替换 2 修改表结构 t ds process definition t ds
  • 三菱PLC 红绿灯 步进指令 STL

    自己写的红绿灯 有启动 停止两个按钮 南北通行4S 东西通行5S 链接 https caiyun 139 com m i 0E5CJEoVGt4D0 提取码 kVOA SET 启动 启动标志 RST 启动 停止标志 SET 停止 停止标志
  • 实例讲解MOS管电源开关电路的软启动

    看到一篇文章 作者在做一款大电压 大电流供电的产品 测试发现启动时的冲击电流很大 最大达到了14 2A 见下图示波器通道2的蓝色波形 通道4的绿色波形是采样电阻的电压 当时作者没有经验 不知道如何去解决 后来同事指点说 解决这个问题需要增加
  • C++总结笔记(十)——堆区内存开辟数组和二级指针

    文章目录 一 堆区开辟数组 1 数组指针与指针数组的区别 2 1维数组 3 2维数组 二 二级指针 一 堆区开辟数组 1 数组指针与指针数组的区别 数组指针是指指向数组的指针 它的本体是一个指针 声明指针变量的时候一般用括号 因为括号的优先
  • 解决 invalid user: VMessAEAD is enforced and a non VMessAEAD connection is received.

    2023 01 31 10 27 56 111 181 19 37 45288 rejected common drain common drain unable to drain connection gt EOF gt proxy vm
  • java-实现网页代码的爬取

    爬取一个网页的内容 当然相对路径以及样式都复制不过来 只能复制这个文件的内容 先将所有异常使用Throws抛出的话 import java io BufferedInputStream import java io BufferedOutp
  • ubuntu 安装 nginx

    apt get安装nginx 1 切换到root用户安装 安装最好用root用户安装 不然很多文件权限的报错会让人崩溃 sudo su root apt get install nginx 安装 nginx v 查看安装版本 service
  • 蓝桥杯单片机备考必看内容,学习一周,保底省三!

    这里我先把我弄到的历年考试类型给大家 但是这图只能参考 经历这届蓝桥杯我深有体会 考试当天早上我还在想要不要看看矩阵键盘 但是想着这个考点概率就没去看隔着摆烂 结果真考了按键12 13 16 17的运用 但是有一点要说的是 这届选择题很多历
  • Java获取Process进程ID,并杀掉相应的进程树

    在使用java过程中 很多人可能遇到过这样的问题 当我们通过cmd exe执行命令的时候 如下 Runtime rt Runtime getRuntime Process process rt exec cmd java会在后台进程中开启一
  • 执行yum install时,终端一直刷重复的内容

    执行yum install时 终端一直刷重复的内容 看起来不像报错 可是又无休止的刷 起因 启动nginx报错 说找不到libcrypto so 6 这是因为缺少openssl相关包 于是执行下载 yum install openssl 发
  • 【PTA】 试试手气

    我们知道一个骰子有 6 个面 分别刻了 1 到 6 个点 下面给你 6 个骰子的初始状态 即它们朝上一面的点数 让你一把抓起摇出另一套结果 假设你摇骰子的手段特别精妙 每次摇出的结果都满足以下两个条件 1 每个骰子摇出的点数都跟它之前任何一
  • 第四章 函数式编程(Lambda表达式&Stream流)

    一 Lambda表达式 特点 是匿名函数 2是可传递 匿名函数 需要一个函数 但又不想命名一个函数的场景下使用lambda表达式 使用lambda表达式时函数内容应该简单 可传递 将lambda表达式传递给其他的函数 它当做参数 lambd
  • 汽车安全标准ISO-26262以及等级ASIL

    1 什么是ISO 26262 为了保证即使出现部分电子器件故障 汽车系统也能在短期 故障容错时间内 内安全进行 2011年11月 ISO International Organization for Standardization 国际标准
  • 【12月海口】2022年第六届船舶,海洋与海事工程国际会议(NAOME 2022)

    2022年第六届船舶 海洋与海事工程国际会议 NAOME 2022 重要信息 会议网址 www icnaome org 会议时间 2022年12月23 25日 召开地点 海南 海口 截稿时间 2022年10月20日 录用通知 投稿后2周内
  • 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(java+python)

    给定一个二叉搜索树 找到该树中两个指定节点的最近公共祖先 百度百科中最近公共祖先的定义为 对于有根树 T 的两个结点 p q 最近公共祖先表示为一个结点 x 满足 x 是 p q 的祖先且 x 的深度尽可能大 一个节点也可以是它自己的祖先