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

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

为了找到二叉树的最大路径和,我们需要考虑所有可能的路径,包括不经过根节点的路径,所以其实如果你从整体上来一条路径一条路径的遍历,太复杂,我们可以换个思路,从每个节点出发,就把那个节点当成根节点,考虑以这个节点为根的最大路径和。这个路径可能只包含左子树或者右子树,或者左右子树都包含。

这里有个很重要的点,当考虑一个节点时,我们实际上只关心以它为根的子树中通过它的最大路径和,不需要知道这条路的完整细节,只需要知道这个最大值是多少。

所以我们用递归和回溯的思想来解决这道题:

  1. 定义一个辅助函数:该函数将返回以当前节点为根的子树中,通过当前节点的最大单边路径和(即只向左或只向右延伸的最大路径和)以及通过当前节点的最大路径和(可能包括左子树和右子树)。但是,对于全局的最大路径和,我们只需要考虑单边路径和,因为全局最大路径可能不经过根节点。

  2. 递归逻辑

    • 递归地计算左子树和右子树的最大单边路径和。
    • 如果左子树或右子树的最大单边路径和为负,我们可以选择不将其包括在路径中(因为加入负值会降低路径和)。
    • 计算通过当前节点的最大路径和(如果左右子树的最大单边路径和都非负,则包括它们;否则,只包括非负的那一边)。
    • 更新全局最大路径和(只考虑单边路径和)。
  3. 回溯:在递归返回之前,需要撤销对当前节点状态的影响,因为我们需要从多个不同的路径来考虑问题。

  4. 初始化:全局最大路径和初始化为最小整数值(例如,Integer.MIN_VALUE),因为路径和至少为负数(只有一个负节点时)。但在实际应用中,由于题目说明节点值为0到9,我们可以初始化为比任何可能的单个节点值都小的数,如-1(如果确信树不为空)。

  5. 返回:返回全局最大路径和

代码如下:

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. 音频路由的基本概念 源&#xff08;Source&#xff09;&#xff1a;音频信号的发出方&#xff0c;通常是一个音频输入设备&#xff0c;如麦克风、音频播放设备等。接收端&#xff08;Sink&#xff09;&#xff1a;音频信号的接收方&#xff0c;通常是音频输出设备&#xff…...

母线槽温度监测的哪个部位?安科瑞母线槽测温解决方案-安科瑞黄安南

安科瑞生产厂家&#xff1a;黄安南 壹捌柒/陆壹伍/零陆贰叁柒 母线槽简单来说充当着电缆的角色只不过它是大电流的输送设备&#xff0c;一般是铜排或者绿排做导体&#xff0c;用非烯性绝缘材料做支撑&#xff0c;搭配金属外壳。相对于电缆来说母线槽的载流能力强、电能损耗低、…...

《深度学习》—— 模型的部署

文章目录 一、部署方式二、部署步骤三、注意事项 深度学习中模型的部署是将训练好的模型应用到实际场景中的过程&#xff0c;以下是对深度学习模型部署的详细解析&#xff1a; 一、部署方式 嵌入式设备部署&#xff1a;将深度学习模型部署到嵌入式设备中&#xff0c;如智能手机…...

多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 程序员节&#xff0c;小贝特意为大家准备了重磅福利&#xff01;新用户使用邀请码「1024」注册 http://OpenBayes.com&#xff0c;即可获得 20 小时单卡 A6000 的免费使用时长&#xff0c;价值 80 元&#xff0c;资源 1 个月有效。仅限今日&#xf…...

OSPF特殊区域及其他特性

不用的链路这状态信息没必要一直保存&#xff0c;要不路由器承受不了。用OSPF 特殊区域解决 1. Stub区域和Totally Stub区域 R1作为ASBR引入多个外部网段&#xff0c;如果Area 2是普通区域&#xff0c;则R3将向该区域注入5类和4类LSA。 当把Area 2配置为Stub区域后&#xff1a…...

动态量化:大模型在端侧CPU快速推理方案

作为一款高性能的推理引擎框架&#xff0c;MNN高度关注Transformer模型在移动端的部署并持续探索优化大模型在端侧的推理方案。本文介绍权重量化的模型在MNN CPU后端的推理方案&#xff1a;动态量化。动态量化指在运行时对浮点型feature map数据进行8bit量化&#xff0c;然后与…...

什么是零拷贝以及其应用场景是什么?

写在前面 本文看下什么是零拷贝&#xff0c;以及其具体的应用场景有哪些。 1&#xff1a;什么是零拷贝 想要解释清楚什么是零拷贝&#xff0c;需要先来看下常规的阻塞io一次io的过程&#xff0c;这里以从文件读取内容然后写到socket为例来看下&#xff0c;如下&#xff1a; …...

开源(open source)是什么?为什么要开源?

为什么开源这个问题挺复杂&#xff0c;这里就从社会面以及个人两个角度来说。当然个人层面的开源其实是建立在社会面形成开源氛围后开始的。 社会面开源 这里举一个例子&#xff0c;既互联网从 web1.0 到 web3.0 &#xff08;开源 → 闭源 → 再开源&#xff09;的历程&#…...

基于Spring Boot的论坛网站:从零到部署

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…...

vue开发的一个小插件vue.js devtools

可打开谷歌商城的情况下&#xff0c;不可打开的可以到极简插件里面去下载 极简插件官网_Chrome插件下载_Chrome浏览器应用商店 搜索vue即可...

GraphLLM:基于图的框架,通过大型语言模型处理数据

GraphLLM是一个创新的框架&#xff0c;它允许用户通过一个或多个大型语言模型&#xff08;LLM&#xff09;来处理数据。这个框架不仅提供了一个强大的代理&#xff0c;能够执行网络搜索和运行Python代码&#xff0c;还提供了一套工具来抓取网页数据&#xff0c;并将其重新格式化…...

HarmonyOS 5.0应用开发——Navigation实现页面路由

【高心星出品】 Navigation实现页面路由 Navigation&#xff1a;路由导航的根视图容器&#xff0c;一般作为页面&#xff08;Entry&#xff09;的根容器去使用&#xff0c;包括单页面&#xff08;stack&#xff09;、分栏&#xff08;split&#xff09;和自适应&#xff08;a…...

物联网行业应用实训室建设方案

一、建设背景 随着物联网技术的迅猛发展和广泛应用&#xff0c;物联网产业已跃升为新时代的经济增长引擎&#xff0c;对于产业升级和社会信息化水平的提升具有举足轻重的地位。因此&#xff0c;为了满足这一领域的迫切需求&#xff0c;培养具备物联网技术应用能力的优秀人才成…...

SOLIDWORKS 2025更灵活零件建模

SOLIDWORKS 2025更灵活零件建模 北京众联亿诚是达索官方授权的SOLIDWORKS经销商&#xff0c;专业经销SOLIDWORKS正版软件并提供免费试用、培训认证、二次开发等增值服务。 在工程设计领域&#xff0c;SOLIDWORKS作为一款功能强大的三维CAD软件&#xff0c;一直以其优越的性能…...

智能巡检机器人的大模型训练

随着工业自动化和智能化进程的不断加快&#xff0c;智能巡检机器人已成为维护和管理复杂设备的重要工具。在电力、石油化工、煤矿、数据中心等行业中&#xff0c;智能巡检机器人通过自主巡检、故障检测等功能&#xff0c;提高了设备管理的效率和安全性。大模型训练在智能巡检机…...

RabbitMQ系列学习笔记(九)--路由模式

文章目录 一、路由模式原理二、多重绑定三、路由模式实战1、消费者代码2、生产者代码3、运行结果分析 本文参考 尚硅谷RabbitMQ教程丨快速掌握MQ消息中间件rabbitmq RabbitMQ 详解 Centos7环境安装Erlang、RabbitMQ详细过程(配图) 一、路由模式原理 使用发布订阅模式时&#x…...

[OS] pthreads-1

线程的基本概念 线程是进程中的一个单一的执行流。一个进程可以包含多个线程&#xff0c;这些线程共享进程中的资源&#xff0c;并且在相同的地址空间中执行。多线程是提高应用程序并行性的流行方法。例如&#xff0c;在浏览器中&#xff0c;不同的标签页可以视作独立的线程。…...

别再只会用WinHex看十六进制了!这5个隐藏功能帮你搞定90%的数据恢复难题

WinHex高阶数据恢复实战&#xff1a;5个被低估的杀手级功能解析 在数据恢复领域&#xff0c;WinHex早已超越了简单的十六进制编辑器定位。这款由X-Ways公司开发的专业工具集成了磁盘编辑、内存分析、数据解释等多项强大功能&#xff0c;但大多数用户仅停留在基础的文件浏览和简…...

GPU工作负载分析与系统优化实践

1. GPU工作负载分析&#xff1a;从硬件计数器到系统优化在当今高性能计算&#xff08;HPC&#xff09;领域&#xff0c;GPU加速集群和超级计算机已成为不可或缺的计算资源。随着GPU硬件性能的不断提升&#xff0c;其暴露的硬件计数器也日益丰富&#xff0c;为深入理解GPU工作负…...

别再微调模型了!Claude 3.5 Sonnet新增3类零样本指令模板:Prompt工程师的最后护城河正在崩塌?

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Claude 3.5 Sonnet零样本指令能力的范式跃迁 Claude 3.5 Sonnet 在零样本&#xff08;zero-shot&#xff09;场景下展现出前所未有的指令理解与泛化能力&#xff0c;标志着大模型从“模式复现”向“意图…...

Nitric本地开发环境搭建:快速测试和调试的完整流程

Nitric本地开发环境搭建&#xff1a;快速测试和调试的完整流程 【免费下载链接】nitric Nitric is a multi-language framework for cloud applications with infrastructure from code. 项目地址: https://gitcode.com/gh_mirrors/ni/nitric Nitric是一个多语言框架&am…...

Faust.js实战:用Next.js构建高性能Headless WordPress前端

1. 项目概述&#xff1a;当WordPress遇见现代前端如果你和我一样&#xff0c;在过去几年里深度参与过企业级WordPress项目&#xff0c;那你一定对那个经典的“两难困境”记忆犹新&#xff1a;一方面&#xff0c;WordPress的后台管理体验和内容生态无可匹敌&#xff0c;是内容团…...

2.2 本地文件读取

本章学习目标&#xff1a; 知道CSV、Excel、JSON三种文件分别怎么读、会遇到什么常见问题理解每种文件格式的“坑”在哪里&#xff0c;以及如何向AI描述解决方案学会用“人话”告诉AI你要做什么&#xff0c;让AI生成代码不需要记住任何函数名或参数&#xff0c;只需要知道“有什…...

革命性AI图像生成工具Fooocus:让创意触手可及的完整解决方案

革命性AI图像生成工具Fooocus&#xff1a;让创意触手可及的完整解决方案 【免费下载链接】Fooocus Focus on prompting and generating 项目地址: https://gitcode.com/GitHub_Trending/fo/Fooocus 你是否曾经被复杂的AI绘画工具吓退&#xff1f;Fooocus正是为你打造的解…...

本地AI任务编排工具AgentForge:从看板管理到多代理协作

1. 项目概述&#xff1a;一个能调度AI编码代理的本地看板工具如果你和我一样&#xff0c;日常开发中经常需要让Claude Code这类AI编码助手去执行一些重复性的代码审查、重构或者生成任务&#xff0c;并且希望这些任务能像CI/CD流水线一样被编排、调度和监控&#xff0c;那么你一…...

RDMA之从userspace verbs 到kernel verbs

用户态RDMA(userspace verbs)RDMA是一种高性能网络协议&#xff0c;一般用在GPU集群的高速通信库&#xff0c;如NCCL、NVSHMEM等&#xff0c;这些都是用户态通信库&#xff0c;我们熟知的RDMA大部分都是用户态RDMA。比如&#xff0c;如下一个简单的RDMA程序int main() { ​// 1…...

SatGate-Proxy:开源反向代理与隧道工具部署与实战指南

1. 项目概述与核心价值最近在折腾一些需要跨地域、跨网络环境访问的应用时&#xff0c;遇到了一个老生常谈的痛点&#xff1a;如何稳定、高效地访问那些因为网络策略限制而无法直接触达的服务。这不仅仅是个人用户的需求&#xff0c;很多中小团队在部署混合云、进行远程办公或访…...