算法-二叉树的最大路径和

为了找到二叉树的最大路径和,我们需要考虑所有可能的路径,包括不经过根节点的路径,所以其实如果你从整体上来一条路径一条路径的遍历,太复杂,我们可以换个思路,从每个节点出发,就把那个节点当成根节点,考虑以这个节点为根的最大路径和。这个路径可能只包含左子树或者右子树,或者左右子树都包含。
这里有个很重要的点,当考虑一个节点时,我们实际上只关心以它为根的子树中通过它的最大路径和,不需要知道这条路的完整细节,只需要知道这个最大值是多少。
所以我们用递归和回溯的思想来解决这道题:
-
定义一个辅助函数:该函数将返回以当前节点为根的子树中,通过当前节点的最大单边路径和(即只向左或只向右延伸的最大路径和)以及通过当前节点的最大路径和(可能包括左子树和右子树)。但是,对于全局的最大路径和,我们只需要考虑单边路径和,因为全局最大路径可能不经过根节点。
-
递归逻辑:
- 递归地计算左子树和右子树的最大单边路径和。
- 如果左子树或右子树的最大单边路径和为负,我们可以选择不将其包括在路径中(因为加入负值会降低路径和)。
- 计算通过当前节点的最大路径和(如果左右子树的最大单边路径和都非负,则包括它们;否则,只包括非负的那一边)。
- 更新全局最大路径和(只考虑单边路径和)。
-
回溯:在递归返回之前,需要撤销对当前节点状态的影响,因为我们需要从多个不同的路径来考虑问题。
-
初始化:全局最大路径和初始化为最小整数值(例如,
Integer.MIN_VALUE),因为路径和至少为负数(只有一个负节点时)。但在实际应用中,由于题目说明节点值为0到9,我们可以初始化为比任何可能的单个节点值都小的数,如-1(如果确信树不为空)。 -
返回:返回全局最大路径和
代码如下:
import javax.swing.tree.TreeNode;public class maxPathSum {// 二叉树中最大路径和// 二叉树的路径被定义为一条节点序列,同一个节点在一条路径序列中至多出现一次 该路径至少包含一个节点,且不一定经过根节点// 返回其最大路径和 注意节点值可能是负数class Solution{private int maxSum=Integer.MIN_VALUE;public int maxPathSum(TreeNode root) {maxGain(root);return maxSum;}private int maxGain(TreeNode node){if(node==null){return 0;}// 递归获得左右子树的单边路径和int leftGain=Math.max(maxGain(node.left),0);int rightGain=Math.max(maxGain(node.right),0);// 通过当前节点的最大路径和(可能是左+根+右,但只计算单边为正的情况)int priceNewPath=node.val+leftGain+rightGain;// 更新全局最大路径和maxSum=Math.max(maxSum,priceNewPath);// 返回以当前节点为根的最大单边路径和return node.val+Math.max(leftGain,rightGain);}}// 注意maxGain返回的是以当前节点为根的子树中,通过当前节点的最大单边路径和,但这对于找到全局最大路径和是足够的// 我们不需要知道全局最大路径的确切路径,只需要知道它的和是多少。}
相关文章:
算法-二叉树的最大路径和
为了找到二叉树的最大路径和,我们需要考虑所有可能的路径,包括不经过根节点的路径,所以其实如果你从整体上来一条路径一条路径的遍历,太复杂,我们可以换个思路,从每个节点出发,就把那个节点当成…...
解决url含%导致404错误
String imageUrl;// 使用WebClient下载图片WebClient webClient WebClientUtil.getWebClient();Mono<ByteArrayOutputStream> byteArrayOutputStreamMono webClient.get().uri(imageUrl).retrieve().bodyToFlux(DataBuffer.class) // 获取图片内容的DataBuffer流.reduc…...
[Linux Codec驱动]音频路由概念
1. 音频路由的基本概念 源(Source):音频信号的发出方,通常是一个音频输入设备,如麦克风、音频播放设备等。接收端(Sink):音频信号的接收方,通常是音频输出设备ÿ…...
母线槽温度监测的哪个部位?安科瑞母线槽测温解决方案-安科瑞黄安南
安科瑞生产厂家:黄安南 壹捌柒/陆壹伍/零陆贰叁柒 母线槽简单来说充当着电缆的角色只不过它是大电流的输送设备,一般是铜排或者绿排做导体,用非烯性绝缘材料做支撑,搭配金属外壳。相对于电缆来说母线槽的载流能力强、电能损耗低、…...
《深度学习》—— 模型的部署
文章目录 一、部署方式二、部署步骤三、注意事项 深度学习中模型的部署是将训练好的模型应用到实际场景中的过程,以下是对深度学习模型部署的详细解析: 一、部署方式 嵌入式设备部署:将深度学习模型部署到嵌入式设备中,如智能手机…...
多IP访问浏览器
添加多个ip地址 nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.61.100/24 ipv4.addresses 192.168.61.200/24 ipv4.addresses 192.168.61.128 ipv4.gateway 192.168.61.2 ipv4.dns 114.114.114.114...
1024程序员节福利放送 | AI 照片修复魔法,一键重拾旧时记忆
程序员充电礼包 今天是 1024 程序员节,小贝特意为大家准备了重磅福利!新用户使用邀请码「1024」注册 http://OpenBayes.com,即可获得 20 小时单卡 A6000 的免费使用时长,价值 80 元,资源 1 个月有效。仅限今日…...
OSPF特殊区域及其他特性
不用的链路这状态信息没必要一直保存,要不路由器承受不了。用OSPF 特殊区域解决 1. Stub区域和Totally Stub区域 R1作为ASBR引入多个外部网段,如果Area 2是普通区域,则R3将向该区域注入5类和4类LSA。 当把Area 2配置为Stub区域后:…...
动态量化:大模型在端侧CPU快速推理方案
作为一款高性能的推理引擎框架,MNN高度关注Transformer模型在移动端的部署并持续探索优化大模型在端侧的推理方案。本文介绍权重量化的模型在MNN CPU后端的推理方案:动态量化。动态量化指在运行时对浮点型feature map数据进行8bit量化,然后与…...
什么是零拷贝以及其应用场景是什么?
写在前面 本文看下什么是零拷贝,以及其具体的应用场景有哪些。 1:什么是零拷贝 想要解释清楚什么是零拷贝,需要先来看下常规的阻塞io一次io的过程,这里以从文件读取内容然后写到socket为例来看下,如下: …...
开源(open source)是什么?为什么要开源?
为什么开源这个问题挺复杂,这里就从社会面以及个人两个角度来说。当然个人层面的开源其实是建立在社会面形成开源氛围后开始的。 社会面开源 这里举一个例子,既互联网从 web1.0 到 web3.0 (开源 → 闭源 → 再开源)的历程&#…...
基于Spring Boot的论坛网站:从零到部署
2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…...
vue开发的一个小插件vue.js devtools
可打开谷歌商城的情况下,不可打开的可以到极简插件里面去下载 极简插件官网_Chrome插件下载_Chrome浏览器应用商店 搜索vue即可...
GraphLLM:基于图的框架,通过大型语言模型处理数据
GraphLLM是一个创新的框架,它允许用户通过一个或多个大型语言模型(LLM)来处理数据。这个框架不仅提供了一个强大的代理,能够执行网络搜索和运行Python代码,还提供了一套工具来抓取网页数据,并将其重新格式化…...
HarmonyOS 5.0应用开发——Navigation实现页面路由
【高心星出品】 Navigation实现页面路由 Navigation:路由导航的根视图容器,一般作为页面(Entry)的根容器去使用,包括单页面(stack)、分栏(split)和自适应(a…...
物联网行业应用实训室建设方案
一、建设背景 随着物联网技术的迅猛发展和广泛应用,物联网产业已跃升为新时代的经济增长引擎,对于产业升级和社会信息化水平的提升具有举足轻重的地位。因此,为了满足这一领域的迫切需求,培养具备物联网技术应用能力的优秀人才成…...
SOLIDWORKS 2025更灵活零件建模
SOLIDWORKS 2025更灵活零件建模 北京众联亿诚是达索官方授权的SOLIDWORKS经销商,专业经销SOLIDWORKS正版软件并提供免费试用、培训认证、二次开发等增值服务。 在工程设计领域,SOLIDWORKS作为一款功能强大的三维CAD软件,一直以其优越的性能…...
智能巡检机器人的大模型训练
随着工业自动化和智能化进程的不断加快,智能巡检机器人已成为维护和管理复杂设备的重要工具。在电力、石油化工、煤矿、数据中心等行业中,智能巡检机器人通过自主巡检、故障检测等功能,提高了设备管理的效率和安全性。大模型训练在智能巡检机…...
RabbitMQ系列学习笔记(九)--路由模式
文章目录 一、路由模式原理二、多重绑定三、路由模式实战1、消费者代码2、生产者代码3、运行结果分析 本文参考 尚硅谷RabbitMQ教程丨快速掌握MQ消息中间件rabbitmq RabbitMQ 详解 Centos7环境安装Erlang、RabbitMQ详细过程(配图) 一、路由模式原理 使用发布订阅模式时&#x…...
[OS] pthreads-1
线程的基本概念 线程是进程中的一个单一的执行流。一个进程可以包含多个线程,这些线程共享进程中的资源,并且在相同的地址空间中执行。多线程是提高应用程序并行性的流行方法。例如,在浏览器中,不同的标签页可以视作独立的线程。…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
