当前位置: 首页 > news >正文

235. 二叉搜索树的最近公共祖先 Python

文章目录

  • 一、题目描述
      • 示例 1
      • 示例 2
  • 二、代码
  • 三、解题思路


一、题目描述

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

百度百科中最近公共祖先的定义为:“对于有根树 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 为不同节点且均存在于给定的二叉搜索树中。

二、代码

代码如下:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = Noneclass Solution:def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':# 寻找p和q节点的父节点,如果2者其当前父节点相同或者其中一个的父节点等同于另一个节点,则表示找到;# 如果当前父节点不相同,则继续找当前父节点的父节点,直到找到为止p_father = []q_father = []def findp(r):if r.val == p.val:p_father.append(r)returnelif r.val > p.val:p_father.append(r)findp(r.left)else:p_father.append(r)findp(r.right)def findq(r):if r.val == q.val:q_father.append(r)returnelif r.val > q.val:q_father.append(r)findq(r.left)else:q_father.append(r)findq(r.right)findp(root)findq(root)result = rootfor i in range(min(len(q_father),len(p_father))):if q_father[i] == p_father[i]:result = q_father[i]continueelse:breakreturn result        

三、解题思路

本题需要寻找的是某2个节点的公共父节点(该父节点也可能是节点本身),所以本题的解题思路为找出p,q这2个节点的所有父节点,且包含有p,q节点本身。
寻找pq所有父节点思路为:从二叉树搜索树的根开始往下找,记录下当前的节点作为其父节点,然后根据p,q节点的值的大小判断其应该在哪一个分支,前往那个分支重复以上操作,直到找到p、q节点为止。(因为题意保证p、q节点一定在数中存在且唯一,所以找到该节点的父节点路径仅有1条)
然后根据找到p、q的所有父节点的列表,开始从头寻找这2个列表的公共最大子列表,找到其公共最大子列表后,返回其最后一位节点即可。
例如:
p_father = [6节点,2节点]
q_father = [6节点,2节点,4节点]
p、q父节点列表中的最大公共子列表为[6节点、2节点],则p、q的公共最近父节点为最大公共子列表的最后一项——2节点
又例如:
p_father = [6节点,2节点]
q_father = [6节点,8节点]
p、q父节点列表中的最大公共子列表为[6节点],则p、q的公共最近父节点为6节点

相关文章:

235. 二叉搜索树的最近公共祖先 Python

文章目录 一、题目描述示例 1示例 2 二、代码三、解题思路 一、题目描述 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足…...

Apollo介绍和入门

文章目录 Apollo介绍配置中心介绍apollo介绍主流配置中心功能特性对比 Apollo简介 入门简单的执行流程Apollo具体的执行流程Apollo对象执行流程分步执行流程 核心概念应用,环境,集群,命名空间企业部署方案灰度发布全量发布 配置发布的原理发送…...

一文看懂Oracle 19c OCM认证考试(需要Oracle OCP证书)

Oracle OCM的认证全称是Oracle Certified Master,是比OCP更高一级的认证,姚远老师的很多OCP学员都对OCM考试有兴趣,这里跟大家做个介绍。 OCM考试全部是上机的实操考试,没有笔试,要到Oracle原厂参加两天的考试。参加1…...

回归预测 | MATLAB实现PSO-SDAE粒子群优化堆叠去噪自编码器多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现PSO-SDAE粒子群优化堆叠去噪自编码器多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现PSO-SDAE粒子群优化堆叠去噪自编码器多输入单输出回归预测(多指标,多图)效果一览…...

python自学

自学第一步 第一个简单的基础,向世界说你好 启动python 开始 print是打印输出的意思,就是输出引号内的内容。 标点符号必须要是英文的,因为他只认识英文的标点符号。 exit()推出python。 我们创建一个文本文档&…...

元宇宙安全与著作权相关市场与技术动态:韩国视角

元宇宙市场动态 元宇宙安全与著作权维护技术现状 元宇宙有可能为商业创造巨大价值,尤其是在零售和时尚领域。时尚产品的象征性价值不仅在物理空间中得以保持,在虚拟空间中也是如此。通过元宇宙平台,企业可以开发虚拟产品,降低供…...

springboot整合neo4j--采用Neo4jClient和Neo4jTemplate方式

1.背景 看了spring-boot-starter-data-neo4j的源码之后发现,该starter内已经实现了Neo4jClient和Neo4jTemplate,我们只需要使用Autowire就能直接使用它操作neo4j。 Neo4jClient方式与我的另一篇springboot整合neo4j-使用原生cypher Java API博客方式一样…...

【算法与数据结构】701、LeetCode二叉搜索树中的插入操作

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:这道题关键在于分析插入值的位置,不论插入的值是什么(插入值和原有树中的键值都…...

前端--HTML

文章目录 HTML结构快速生成代码框架HTML常见标签 表格标签 编写简历信息 填写简历信息 Emmet 快捷键 HTML 特殊字符 一、HTML结构 1.认识HTML标签 HTML 代码是由 "标签" 构成的. 形如: <body>hello</body> 标签名 (body) 放到 < > 中 大部分标…...

安装配置 zookeeper(单机版)

目录 一 准备并解压安装包 二 修改zoo.cfg文件 三 创建相应两个目录 四 创建文件myid 五 修改环境变量 六 启动 zookeeper 一 准备并解压安装包 这里提供了网盘资源 http://链接: https://pan.baidu.com/s/1BybwSQ_tQUL23OI6AWxwFw?pwdd4cf 提取码: d4cf 这里的安装包是…...

2023/9/7 -- C++/QT

作业 1> 思维导图 2> 封装一个结构体&#xff0c;结构体中包含一个私有数组&#xff0c;用来存放学生的成绩&#xff0c;包含一个私有变量&#xff0c;用来记录学生个数&#xff0c; 提供一个公有成员函数&#xff0c;void setNum(int num)用于设置学生个数 提供一个…...

2023年09月IDE流行度最新排名

点击查看最新IDE流行度最新排名&#xff08;每月更新&#xff09; 2023年09月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多&#xff0c;这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…...

MyBatis基础之概念简介

文章目录 基本概念1. 关于 MyBatis2. MyBatis 的体系结构3. 使用 XML 构建 SqlSessionFactory4. SqlSession5. 默认的别名6. 补充 [注意] 放前面前 很多人可能在使用 MyBatis-plus 进行代码开发&#xff0c;MyBatis的这部分内容是用来更好的讲述之后的内容。 基本概念 1. 关于…...

解决 SQLyog 连接 MySQL8.0+ 报错:错误号码2058

文章目录 一、问题现象二、原因分析三、解决方案1. 方案1&#xff1a;更新SQLyog版本2. 方案2&#xff1a;修改用户的授权插件3. 方案3&#xff1a;修复my.cnf 或 my.ini配置文件 四、最后总结 本文将总结如何解决 SQLyog 连接 MySQL8.0 时报错&#xff1a;错误号码2058 一、问…...

Linux内核4.14版本——drm框架分析(11)——DRM_IOCTL_MODE_ADDFB2(drm_mode_addfb2)

目录 1. drm_mode_addfb2 2. drm_internal_framebuffer_create 3. drm_fb_cma_create->drm_gem_fb_create->drm_gem_fb_create_with_funcs 4. drm_gem_fb_alloc 4.1 drm_helper_mode_fill_fb_struct 4.2 drm_framebuffer_init 5. 调用流程图 书接上回&#xff0c;使…...

mysql的date_format()函数格式月份的坑

问题背景 我表中有个字段存的是“年-月”格式的字符串&#xff0c;格式是这样的&#xff1a;‘2023-08’ 在查询这个表数据时&#xff0c;我使用了如下sql语句&#xff1a; select * from car where date_format(car_start_month,%Y-%m)<2023-08 意思是查询 car_start_mo…...

保姆级式教程:教你制作电子画册

在这个数字化时代&#xff0c;电子画册成为了展示和分享作品的一种流行方式。制作一个精美的电子画册不仅可以展示你的创意和才华&#xff0c;还可以吸引更多人的关注和欣赏。下面告诉大家一些小步骤&#xff0c;带你一步步学习如何制作电子画册。 1.收集和整理作品 接下来&am…...

探究Nginx应用场景

1 静态资源 Nginx是一个流行的Web服务器和反向代理服务器&#xff0c;它可以用于托管静态资源。下面是一个简单的案例&#xff0c;展示了如何使用Nginx来提供静态资源。 假设你有一个名为example.com的域名&#xff0c;并且你希望使用Nginx来托管位于/var/www/html目录下的静…...

sklearn中的数据集使用

导库 from sklearn.datasets import load_iris 实现 # 加载数据集 iris load_iris() print(f查看数据集&#xff1a;{iris}) print(f查看数据集的特征&#xff1a;{iris.feature_names}) print(f查看数据集的标签&#xff1a;{iris.target_names}) print(f查看数据集的描述…...

LLM在电商推荐系统的探索与实践

本文对LLM推荐的结合范式进行了梳理和讨论&#xff0c;并尝试将LLM涌现的能力迁移应用在推荐系统之中&#xff0c;利用LLM的通用知识来辅助推荐&#xff0c;改善推荐效果和用户体验。 背景 电商推荐系统&#xff08;Recommend System&#xff0c;RecSys&#xff09;是一种基于用…...

MySQL视图实战:用SQL视图搞定学生奖学金评定与补考名单(附完整代码)

MySQL视图实战&#xff1a;用SQL视图搞定学生奖学金评定与补考名单&#xff08;附完整代码&#xff09; 教务管理系统中&#xff0c;数据处理效率直接影响决策质量。想象一下每学期末&#xff0c;教务处老师需要从数十万条记录中筛选奖学金候选人和补考名单——传统的手写SQL查…...

番茄矮砧密植:水肥一体化系统铺设全指南

大棚里&#xff0c;老周的番茄挂果累累&#xff0c;红绿相间。“这套系统让我的番茄产量翻了一番&#xff0c;”他指着地里的滴灌设备说&#xff0c;“不仅省工省力&#xff0c;品质还特别稳定。”认识番茄矮砧密植番茄矮砧密植&#xff0c;简单来说就是选用矮生品种&#xff0…...

Deepin Boot Maker:智能解析引擎驱动的跨平台启动盘制作方案

Deepin Boot Maker&#xff1a;智能解析引擎驱动的跨平台启动盘制作方案 【免费下载链接】deepin-boot-maker 项目地址: https://gitcode.com/gh_mirrors/de/deepin-boot-maker Deepin Boot Maker是一款采用智能解析引擎的跨平台开源工具&#xff0c;通过自动化流程与硬…...

告别B站评论区识人难题!这个免费工具让你一键掌握用户背景

告别B站评论区识人难题&#xff01;这个免费工具让你一键掌握用户背景 【免费下载链接】bilibili-comment-checker B站评论区自动标注成分&#xff0c;支持动态和关注识别以及手动输入 UID 识别 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-comment-checker …...

打破BIM模型Web化壁垒:Revit2GLTF的轻量化转换技术革新

打破BIM模型Web化壁垒&#xff1a;Revit2GLTF的轻量化转换技术革新 【免费下载链接】Revit2GLTF view demo 项目地址: https://gitcode.com/gh_mirrors/re/Revit2GLTF 在数字化建筑设计流程中&#xff0c;BIM模型的高效协作与展示一直是行业痛点。设计团队常常面临这样的…...

OpenClaw技能开发入门:为Qwen3-VL:30B编写图片翻译插件

OpenClaw技能开发入门&#xff1a;为Qwen3-VL:30B编写图片翻译插件 1. 为什么需要自定义技能开发 去年冬天&#xff0c;我接手了一个跨国团队的文档协作项目&#xff0c;每天需要处理大量包含多语言图片的飞书消息。当我在深夜第三次手动将日文截图粘贴到翻译软件时&#xff…...

数字图书馆下载工具:高效获取策略与跨平台使用方案

数字图书馆下载工具&#xff1a;高效获取策略与跨平台使用方案 【免费下载链接】internet_archive_downloader A chrome/firefox extension that download books from Internet Archive(archive.org) and HathiTrust Digital Library (hathitrust.org) 项目地址: https://git…...

链式前向星:高效图存储的进阶指南

1. 为什么需要链式前向星&#xff1f; 当你第一次接触图论算法时&#xff0c;可能会被邻接矩阵和邻接表搞得晕头转向。我刚开始学图论的时候&#xff0c;就经常在这两种存储方式之间纠结。邻接矩阵写起来简单&#xff0c;一个二维数组就能搞定&#xff0c;但当节点数超过10000时…...

从零到一:手把手教你用海康VisionMaster完成第一个字符识别项目(附完整流程与避坑点)

从零到一&#xff1a;手把手教你用海康VisionMaster完成第一个字符识别项目&#xff08;附完整流程与避坑点&#xff09; 在工业自动化领域&#xff0c;字符识别技术正逐渐成为生产线上的"眼睛"。无论是产品追溯码读取、包装日期检测&#xff0c;还是仪表盘数值记录&…...

WarcraftHelper:魔兽争霸3现代兼容性解决方案,让你的经典游戏焕发新生

WarcraftHelper&#xff1a;魔兽争霸3现代兼容性解决方案&#xff0c;让你的经典游戏焕发新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 魔兽争霸…...