最近公共祖先 python_求二叉搜索树的最近公共祖先

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

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

思路:

二叉搜索树的定义为:对于树中的每个节点X,它的左子树的所有关键字值小于X的关键字值,而它的右子树中所有关键字值大于X的关键字值。这意味着二叉搜索树所有的元素可以用某种统一的方式排序。

在这里只需要比较两个节点和根的值的大小,确定两个节点所在位置,如果两个节点分别在根的两边,那么可以肯定它们的最近公共祖先就是根节点,如果在同一侧就可以递归查找了。

递归写法:

# Definition for a binary tree node.

# class TreeNode:

# def __init__(self, x):

# self.val = x

# self.left = None

# self.right = None

class Solution:

def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':

if p.val > root.val < q.val:

return self.lowestCommonAncestor(root.right, p, q)

elif p.val < root.val > q.val:

return self.lowestCommonAncestor(root.left, p, q)

else:

return root

非递归写法:

# Definition for a binary tree node.

# class TreeNode:

# def __init__(self, x):

# self.val = x

# self.left = None

# self.right = None

class Solution:

def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':

while root:

if p.val > root.val < q.val:

root = root.right

elif p.val < root.val > q.val:

root = root.left

else:

return root

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

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

相关文章

gdb使用实例

第一篇 概论我们将学习使用gdb来调试通过一个通过串行线同PC相连的嵌入式系统。Gdb可以调试各种程序&#xff0c;包括C、C、JAVA、PASCAL、FORAN和一些其它的语言。包括GNU所支持的所有微处理器的汇编语言。在gdb的所有可圈可点的特性中&#xff0c;有一点值得注意&#xff0c;…

Linux 监控命令之 netstat

netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据&#xff0c;一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序&#xff0c;它能提供TCP连接&#xff0c;TCP和UDP监听&#xff0c;进程内存管理的相关报告。 语法 netstat [-acC…

C#递归搜索指定目录下的文件或目录

来源&#xff1a;https://www.cnblogs.com/huhangfei/p/5012978.html诚然可以使用现成的Directory类下的GetFiles、GetDirectories、GetFileSystemEntries这几个方法实现同样的功能&#xff0c;但请相信我不是蛋疼&#xff0c;原因是这几个方法在遇上【System Volume Informati…

solr 配置

创建 SolrHome(solrCore) 1.解压 solr-4.10.4.tgz 到 /usr/local/solr 2.将 solr-4.10.4/example/solr 下所有文件拷贝到 /usr/local/solrhome (此 solrhome 为自己创建的) solrhome 是 solr 运行主目录&#xff0c;可包含多个 SolrCore 目录SolrCore 目录中包含运行 Solr 实例…

mfc程序转化为qt_10年程序员:我都学过这些语言,2019年开始我再也不是程序员......

为什么学编程2008年&#xff0c;高中毕业的我问一个已经工作两年的亲戚&#xff1a;什么专业工资高&#xff1f;他告诉我&#xff1a;程序员。2008年成都最低工资好像是800元&#xff0c;我的生活费也是800元&#xff0c;据他所说程序员出来的工资是2000&#xff0c;于是开始了…

day 7 引用

1.ba在c语言和python中的区别 c语言&#xff1a;a100 a变量里面放的100 b a b变量里面也放的100 python &#xff1a; a100 内存中有个100 a放的100的内存地址 b a b也放的100的内存地址 相当于给100那一块内存&#xff0c;贴个便利签 2.type查看数据类型&…

Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示...

Dapper的牛逼就不扯蛋了&#xff0c;答应群友做个入门Demo的&#xff0c;现有园友需要&#xff0c;那么公开分享一下&#xff1a; 完整Demo&#xff1a;http://pan.baidu.com/s/1i3TcEzj 注 意 事 项&#xff1a;http://www.cnblogs.com/dunitian/p/5221058.html 平台之大势何人…

Linux 状态命令之磁盘状态 iostat

Linux系统中的iostat是I/O statistics&#xff08;输入/输出统计&#xff09;的缩写&#xff0c;iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况&#xff0c;同时也会汇报出CPU使用情况。同vmstat一样&#xff0c;iostat也有一个弱点&#xff0c;就…

GDB十分钟教程

GDB十分钟教程 作者: liigo 原文链接: http://blog.csdn.net/liigo/archive/2006/01/17/582231.aspx 日期: 2006年1月16日 本文写给主要工作在Windows操作系统下而又需要开发一些跨平台软件的程序员朋友&#xff0c;以及程序爱好者。 GDB是一个由GNU开源组织发布的、UNIX/LI…

课后作业-阅读任务-阅读提问-3

1.如果两个人合作的始终达不到规范阶段该怎如何处理&#xff1f; 2. 逻辑和界面设计要注意哪些因素&#xff1f;转载于:https://www.cnblogs.com/fhycm/p/7866548.html

ride上点击用例不能显示edit信息_接口测试平台代码实现61: 多接口用例1

终于又序更上了&#xff0c;原谅最近作者几天事情不断。按照我们之前的计划&#xff0c;需要迅速开启很重要的核心多用例接口。首先&#xff0c;我们要确定&#xff0c;这个功能的大体设计。就放在在我们的页面 用例库 中&#xff1a;所以也就是我们很久之前就创建好的P_cases.…

黑客攻防专题八:21种RING的提权方法

好多都没有成功&#xff0c;还是发来看看&#xff0c;看看思路&#xff0c;呵呵 以下全部是本人提权时候的总结 很多方法至今没有机会试验也没有成功&#xff0c;但是我是的确看见别人成功过的。本人不才&#xff0c;除了第一种方法自己研究的&#xff0c;其他的都是别人的经验…

Linux 状态命令之内存状态 free

简介 free指令会显示内存的使用情况&#xff0c;包括实体内存&#xff0c;虚拟的交换文件内存&#xff0c;共享内存区段&#xff0c;以及系统核心使用的缓冲区等。 语法 free [-bkmotV][-s <间隔秒数>]参数说明&#xff1a;-b  以Byte为单位显示内存使用情况。-k  以…

SpringMVC在使用Jackson2时关于日期类型格式化的问题

*本例程序使用Jackson2.9.0&#xff0c;jackson1.x的处理方式稍稍有些不同。 在基于Spring&SpringMVC的Web项目中&#xff0c;我们常使用Jackson(1.x/2.x)来增加程序对Json格式的数据的支持。 因此&#xff0c;在实际应用中有个常见的需求&#xff1a;日期的格式化。 假设&…

GDB 使用——Linux C编程

简述 一 列文件清单 二&#xff1a;执行程序 三&#xff1a;显示数据 四&#xff1a;断点(breakpoint) 五&#xff0e;断点的管理 六&#xff0e;变量的检查和赋值 七. 单步执行 八&#xff0e;函数的调用 九&#xff0e;机器语言工具 …

python拨号_python 拨号代码(win10 系统亲测有效)

# -*- coding: utf-8 -*-import win32rasimport time,osdef Connect(dialname, account, passwd):dial_params (dialname, , , account, passwd, )return win32ras.Dial(None, None, dial_params, None)def DialBroadband():dialname u宽带连接 #just a nameaccount u059291…

HP服务器引导盘下载地址

HP SmartStart CD 8.7 x32版本的下载地址为&#xff1a;http://ftp.hp.com/pub/softlib2/software1/cd/p1040463476/v63549/smartstart-8.70-0-x86.zip HP SmartStart CD 8.7 x32版本支持以下机型&#xff1a; HP ProLiant ML 和 DL 300、500 和 700 系列以及 HP ProLiant BL S…

MUI - 预加载

打开详情页回到顶部:document.body.scrollTop document.documentElement.scrollTop 0;方式一&#xff1a;preload一次仅能预加载一个页面&#xff08;除非循环&#xff09; var subWebview mui.preload({url: examples/accordion.html,id: template_sub,top: styles: {48 …

python 分类变量xgboost_【转】XGBoost参数调优完全指南(附Python代码)

xgboost入门非常经典的材料&#xff0c;虽然读起来比较吃力&#xff0c;但是会有很大的帮助&#xff1a;英文原文链接:https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/

用 GDB 调试Linux程序及有用技巧

用 GDB 调试Linux程序及有用技巧(转) armlinux 2008-06-19 10:48 阅读91 评论0 字号&#xff1a; 大大 中中 小小 GNU的调试器称为gdb&#xff0c;该程序是一个交互式工具&#xff0c;工作在字符模式。在 X Window 系统中&#xff0c;有一个gdb的前端图形工具…