python解决求二叉树的最长同值路径问题

对于给定的一颗二叉树,需要找到最长的路径,并且该路径上的每个节点具有相同的值的问题,对于寻找到的这条路径可以经过根节点也可以不经过根节点,两个节点之间的路径长度是由他们的变数来表示的,给定如下图的二叉树

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

给定的两颗二叉树的最长同值路径输出都为2。

给定问题的最长同值路径,想通过一个函数来对整个二叉树求解的话是较为复杂的,但是如果只对一个节点求同值路径的话,思路则较为清晰,这样就可以把这个复杂的原始问题分解成为了规模较小的子问题,所以考虑使用递归算法,以如下的二叉树作为例子,详细讲解递归函数的执行过程。

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

如上图显示,该图显示的是从执行A递归函数到最终返回所要求的最长同值路径的数值。A(5)会先入栈,根节点5的左子节点是4,然后A(4)入栈,节点4的左子节点是1,A(1)入栈,节点1的左子节点是空节点,所以A(NULL)入栈,最后A(NULL)的返回值是0,返回给上层,返回的0对应的是A(1)的left是0,此时执行A(1)函数内的right=self.A(root.right),即A(NULL)入栈。

添加图片注释,不超过 140 字(可选)

返回的0是A(1)函数中的right=0,此时A(1)函数可以执行语句return max(left,right),返回给上层0,并且A(1)出栈,如下图:

添加图片注释,不超过 140 字(可选)

返回的0是A(4)函数中的left=0,此时执行的是A(4)函数中的right=slef.A(root.right),节点4的右子节点是空节点,即A(NULL)入栈

添加图片注释,不超过 140 字(可选)

然后返回的0是A(4)函数中的right=0,此时A(4)函数可以执行语句return max(left,right),返回给上层0,A(4)出栈。

添加图片注释,不超过 140 字(可选)

使用python的代码实现如下:

class Solution(object):def main(self, root):   #主函数mainself.max_length=0 #全局变量,用于保存当前最长同值路径self.A(root)return self.max_lengthdef A(self,root):    #被调函数,也是递归函数if not root: return 0left=self.A(root.left)right=self.A(root.right)if root.left and root.left.val==root.val:left+=1else:left=0if root.right and root.right.val==root.val:right+=1else:right=0self.max_length=max(self.max_length,left+right)return max(left,right) #返回给上层的是左右子路径最长同值路径

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

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

相关文章

【 Qt 快速上手】-②- Qt 环境搭建

文章目录 1. Qt 开发工具概述1.1 Qt Creator 介绍1.2 Visual Studio 介绍1.3 Eclipse 介绍 2. Qt SDK 的下载与安装2.1 Qt SDK 的下载2.2 Qt SDK 的安装2.3 验证 Qt SDK 安装是否成功2.4 Qt 环境变量配置 1. Qt 开发工具概述 Qt 开发环境需要安装三个部分: C编译器…

小伙频繁发朋友圈引发分手,拼命“晒“生活是否成为一种病态行为?

根据《西湖之声》1月19日的报道,一个小伙子因为一天发十几条朋友圈而引起了他女友的不满,女友甚至提出了分手。现如今,朋友圈已经成为每个人自我形象展示的平台,认真发朋友圈不仅是表达自己的一种方式,也是一种自我释放…

redis缓存和本地缓存的应用设计

数据查询顺序 一级缓存:本地缓存 -》二级缓存:redis缓存 -》数据库 本地缓存和分布式缓存 本地缓存:基于jvm, 意思是程序放在哪,数据就存储在哪,不需要网络请求,特别快,但是需要占用jvm的内存…

Python利用Excel读取和存储测试数据完成接口自动化教程

http_request2.py用于发起http请求 #读取多条测试用例#1、导入requests模块import requests#从 class_12_19.do_excel1导入read_data函数from do_excel2 import read_datafrom do_excel2 import write_datafrom do_excel2 import count_case#定义http请求函数COOKIENonedef ht…

Spring Boot Aop 执行顺序

Spring Boot Aop 执行顺序 1. 概述 在 spring boot 项目中,使用 aop 增强,不仅可以很优雅地扩展功能,还可以让一写多用,避免写重复代码,例如:记录接口耗时,记录接口日志,接口权限&…

python 自动化模块 - pyautogui初探

python 自动化模块 - pyautogui 引言一、安装测试二、简单使用三、常用函数总结 引言 在画图软件中使用pyautogui拖动鼠标,画一个螺旋式的正方形 - (源码在下面) PyAutoGUI允许Python脚本控制鼠标和键盘,以自动化与其他应用程序的交互。API的设计非常简…

限流算法之流量控制的平滑之道:滑动时间窗算法

文章目录 引言简介优点缺点样例样例图样例代码 应用场景结论 引言 在互联网应用中,流量控制是一个重要的组件,用于防止系统过载和保护核心资源。常见的限流算法包括固定窗口算法和滑动时间窗算法。本文将重点介绍滑动时间窗算法,并分析其优缺…

基于Abaqus的三种钢筋混凝土梁数值模拟对比研究

混凝土结构抗压强度高,而抗拉强度大约只有其十分之一,在受到竖向荷载(包括自重)作用下,梁下部会产生拉应力,上部产生压应力,而由于其抗拉强度低,因此很小的荷载即可导致梁下部开裂&a…

Mysql中的日志系统

文章目录 1. 慢查询日志(Slow Query Log)1.1 是否开启慢查询日志1.2 开启慢查询日志,设置时间阈值1.2.1 修改文件my.ini1.2.2 重启mysql后配置生效 1.3 查看慢查询日志1.3.1 直接用文本编辑器打开1.3.2 使用mysqldumpslow进行分析 2. InnoDB …

C语言从入门到实战——文件操作

文件操作 前言一、 为什么使用文件二、 什么是文件2.1 程序文件2.2 数据文件2.3 文件名 三、 二进制文件和文本文件四、 文件的打开和关闭4.1 流和标准流4.1.1 流4.1.2 标准流 4.2 文件指针4.3 文件的打开和关闭4.4 文件的路径 五、 文件的顺序读写5.1 顺序读写函数介绍fgetcfp…

【音视频原理】图像相关概念 ③ ( RGB 色彩简介 | RGB 排列 | YUV 色彩简介 | YUV 编码好处 )

文章目录 一、RGB 色彩1、RGB 色彩简介2、RGB 排列 二、YUV 色彩1、YUV 色彩简介2、YUV 编码好处 一、RGB 色彩 1、RGB 色彩简介 RGB 是 计算机 中的 颜色编码方法 , 红 ( R ) / 绿 ( G ) / 蓝 ( B ) 三个颜色通道 可以设置不同的值 , 每个 通道 的 颜色值都可以取值 0 ~ 255 ,…

【已解决】namespace “Ui“没有成员 xxx

先说笔者遇到的问题,我创建一个QWidget ui文件,然后编辑的七七八八后,想要用.h与.cpp调用其,编译通过,结果报了这个错误,本方法不是普适性,但是确实解决了这个鸟问题。 问题来源 搭建ui后&…

数据分析师不加班的秘密,三行代码教你Python自动发送邮件

作为一名数据分析师,每天除了做数据日报,还要编写邮件正文和添加数据日报附件,发送给对应的负责人及销售个人,一般一封邮件应包含邮箱账户名、邮箱密码、发送人邮箱、邮件主题以及邮件正文。 本文借助Python工具,使用y…

MyBatis框架基础到进阶

1、为什么要学习MyBatis 如果没有MyBatis框架,我们依靠JDBC和连接池已经能够很好的和数据库进行交互了,而学习MyBatis框架最核心的原因是为了减少SQL语句对代码的侵入性。 因为在过往不管是使用连接池还是JDBC Templete,所有的SQL语句都写在代…

java.sql.SQLException: Failed to fetch schema of XXX 问题

遇到问题:java.sql.SQLException: Failed to fetch schema of pay_record表 i.s.r.d.s.s.c.AbstractTableMetaCache : get table meta of the table pay_record error: Failed to fetch schema of pay_record 原因分析: springcloud项目中使用了se…

上海亚商投顾:沪指冲高回落 旅游板块全天强势

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指昨日冲高回落,创业板指跌近1%,北证50指数跌超3%。旅游、零售板块全天强势&#xf…

python类继承之__init__函数覆盖问题

目录 1.问题描述 2.代码演示 3.总结 在Python这个广受欢迎的编程语言中,类继承是一项强大而精巧的特性。通过类继承,我们可以构建出更加灵活、可重用和易维护的代码,同时实现代码的模块化和扩展性。 但是如果对于熟悉C和java的人而言&…

R语言学习 case2:人口金字塔图

step1&#xff1a;导入库 library(ggplot2) library(ggpol) library(dplyr)step2&#xff1a;读取数据 data <- readxl::read_xlsx("data_new.xlsx", sheet 1) datareadxl::read_xlsx() 是 readxl 包中的函数&#xff0c;用于读取Excel文件。 step3&#xff1…

ckman:非常好用的ClickHouse可视化集群运维工具

概述 什么是ckman ckman&#xff0c;全称是ClickHouse Management Console&#xff0c; 即ClickHouse管理平台。它是由擎创科技数据库团队主导研发的一款用来管理和监控ClickHouse集群的可视化运维工具。目前该工具已在github上开源&#xff0c;开源地址为&#xff1a;github…

全网最详细丨2024年AMC8真题及答案来了

目录 前言 真题回忆 真题解析 结尾 前言 相信大家都已经知道今年AMC8出事情了吧&#xff0c;但最重要的还是要从中学到新知识。 听说今年考生被提前12分钟强制交卷了&#xff0c;肯定因为试题泄露了。 最新回复&#xff1a;我们这边已经退费了 真题回忆 需要word文档的请…