老卫带你学---leetcode刷题(124. 二叉树中的最大路径和)

124. 二叉树中的最大路径和

问题:

二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。

路径和 是路径中各节点值的总和。

给你一个二叉树的根节点 root ,返回其 最大路径和 。

示例 1:
输入:root = [1,2,3]
输出:6
解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6
示例 2
输入:root = [-10,9,20,null,null,15,7]
输出:42
解释:最优路径是 15 -> 20 -> 7 ,路径和为 15 + 20 + 7 = 42
提示:树中节点数目范围是 [1, 3 * 104]
-1000 <= Node.val <= 1000

解决:

这道题典型的dfs问题,我们只需要dfs拿到子树可以提供的最大价值就好,对于这种规模不同的相同子问题,直接dfs+递归走起。

所以我们的dfs在计算的时候

  • 一方面要统计该子树所拥有的的最大路径和,用来和最终结果做比较
  • 一方面要计算该子树可以提供给父亲的最大价值,从而递归
func maxPathSum(root *TreeNode) int {maxNum := math.MinInt32 //这里不要用Int,因为Int为0,如果给个用例是负数就过不了了,得给它来个大负数var dfs func(root *TreeNode) intdfs = func(root *TreeNode) int {if root == nil {return 0}left := dfs(root.Left)right := dfs(root.Right)innerMaxNum := left + root.Val + right //当前子树最大路径和,所以下面需要和外面的maxNum做对比maxNum = max(innerMaxNum, maxNum)outMaxNum := root.Val + max(left, right) //当前子树可以提供给父亲节点最大价值,用于递归延续return max(outMaxNum, 0)}dfs(root)return maxNum
}func max(a, b int) int {if a > b {return a}return b
}

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

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

相关文章

【数据结构】单链表的基本操作(节点建立、插入删除)

1. 单链表的基本操作 1.1. 链表的定义1.2. 链表的创建&#xff08;初始化&#xff09; 1.2.1. 不带头结点的链表1.2.2. 带头结点的链表 1.3. 链表的插入和删除 1.3.1. 按位序插入 1.3.1.1. 带头结点1.3.1.2. 不带头结点 1.3.2. 指定节点的后插操作1.3.3. 指定元素的前插操作1.3…

外汇天眼:外汇交易一周最佳外汇交易日!

外汇市场运行24小时&#xff0c;但并非每时每刻都适合交易。本文将为您介绍一周中最佳外汇交易日&#xff0c;以及哪些时间段最适合参与外汇交易。 首先&#xff0c;值得注意的是伦敦时段通常是外汇市场最繁忙的时段。然而&#xff0c;即便如此&#xff0c;一周中仍有特定的日…

debian无法使用reboot 等系统命令解决

重启debian的时候&#xff0c;报错没有此命令 然后查看环境配置文件&#xff0c;发现没有debian 安装后没有自动添加环境变量。 1.首先编辑配置文件 nano /etc/profile2.在文件末尾添加如下内容 export PATH$PATH:/sbin/3.保存退出 CTRL O // 保存 ENTER // 回车确认文…

脚手架开发流程详解

开发流程 创建npm项目创建脚手架入口文件&#xff0c;最上方添加 #!/usr/bin/env/ node配置package.json&#xff0c;添加bin属性编写脚手架代码将脚手架发布到npm 使用流程 安装脚手架 npm install -g your-own-cli使用脚手架 your-own-cli脚手架开发难点解析 分包&…

c语言 - 实现每隔1秒向文件中写入当前系统时间

实现思路 主要是通过库函数和结构体获取当前系统时间&#xff08;年月日和时分秒&#xff09;保存到变量里&#xff0c;然后通过格式化输出函数将当前系统时间输出到文件中去。 但是需要注意的是题目要求每隔 1 s对系统时间进行输出&#xff0c;所以需要加入 sleep()函数进行调…

AOP执行的流程

Spring AOP是通过动态代理实现的&#xff0c;它在运行时通过生成代理对象来拦截和增强目标方法的执行。 具体运行流程如下&#xff1a; 1. 定义切面&#xff1a;使用Spring的AOP注解&#xff08;如Aspect&#xff09;定义切面类&#xff0c;标识切面的切点和通知。 2. 创建目…

computed和methods有什么区别

面试题&#xff1a;computed和methods有什么区别 标准而浅显的回答 在使用时&#xff0c;computed当做属性使用&#xff0c;而methods则当做方法调用computed可以具有getter和setter&#xff0c;因此可以赋值&#xff0c;而methods不行computed无法接收多个参数&#xff0c;而m…

二、浏览器--事件循环(也叫事件环,也叫event loop)--任务队列(等待执行的任务(存放的定时器,http,事件等进程))--渲染三者的关系

引用B站视频&#xff0c;搜索标题&#xff1a;【事件循环】【前端】事件原理讲解&#xff0c;超级硬核&#xff0c;忍不住转载 本视频总结&#xff1a; 超级复杂的JS底层。事件循环和事件队列的关系。宏任务、微任务和raf回调这3个事件队列的关系。任务队列和执行栈的关系。d…

rust类型转换

类型转换 类型转换分为隐式类型转换和显式类型转换。 隐式类型转换是由编译器完成的&#xff0c;开发者并未参与&#xff0c;所有又称自动强制转换。 显式类型转换是由开发者指定的&#xff0c;就是一般意义上的类型转换。 一、显式转换 &#xff08;一&#xff09;as 1.原生…

数据结构与算法之链表: 基于链表实现js中的原型链原理与算法实现 (Typescript版)

常见数据类型的原型链指向 obj -> Object.prototype -> nullfunc -> Function.prototype -> Object.prototype -> nullarr -> Array.prototype -> Object.prototype -> nullobj是Object实例func是Function实例&#xff0c;也是Object实例arr是Array实…

配置OSPFv3基本功能 华为笔记

1.1 实验介绍 1.1.1 关于本实验 OSPF协议是为IP协议提供路由功能的路由协议。OSPFv2&#xff08;OSPF版本2&#xff09;是支持IPv4的路由协议&#xff0c;为了让OSPF协议支持IPv6&#xff0c;技术人员开发了OSPFv3&#xff08;OSPF版本3&#xff09;。 无论是OSPFv2还是OSPFv…

设计模式2、抽象工厂模式 Abstract Factory

解释说明&#xff1a;提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定他们具体的类。 简言之&#xff0c;一个工厂可以提供创建多种相关产品的接口&#xff0c;而无需像工厂方法一样&#xff0c;为每一个产品都提供一个具体工厂 抽象工厂&#xff08;Abstra…

学校安全用电管理系统解决方案

随着科技的发展和进步&#xff0c;电力已成为我们日常生活和学习的重要支柱。然而&#xff0c;电力的使用也带来了一定的安全风险。特别是对于学校这个复杂而又活跃的环境&#xff0c;安全用电管理系统的角色显得尤为重要。 一、学校用电管理系统的现状 目前&#xff0…

win10默认浏览器改不了怎么办,解决方法详解

win10默认浏览器改不了怎么办&#xff0c;解决方法详解_蓝天网络 在使用Windows 10操作系统时&#xff0c;你可能会遇到无法更改默认浏览器的情况。这可能是因为其他程序或设置正在干扰更改。如果你也遇到了这个问题&#xff0c;不要担心&#xff0c;本文将为你提供详细的解决…

CSS基础

目录 一.CSS介绍 三种CSS的写法 1.内部样式 2.内联样式 3.外部表示 二.CSS选择器 1.标签选择器 2.类选择器 ​编辑 3.ID选择器 ​编辑 4.后代选择器 ​编辑 5.子选择器 6.并集选择器 7.伪类选择器 三.CSS常用属性值 1.字体设置 2.文本属性 1.文字颜色 2.文…

kafka 集群搭建 常用命令

1、集群搭建&#xff1a; <1> 将kafka 压缩包解压到某一目录 tar -zxvf kafka_2.12-3.5.1.tgz <2> 修改节点配置文件 vim config/server.properties broker.id0 log.dirs/tmp/kafka-logs <3> 将安装好的kafka 分发到其他服务器 scp -r kafka_2.12-2.4…

华为云云耀云服务器L实例评测 | 实例使用教学之简单使用:通过命令行管理华为云云耀云服务器

华为云云耀云服务器L实例评测 &#xff5c; 实例使用教学之简单使用&#xff1a;通过命令行管理华为云云耀云服务器 介绍华为云云耀云服务器 华为云云耀云服务器 &#xff08;目前已经全新升级为 华为云云耀云服务器L实例&#xff09; 华为云云耀云服务器是什么华为云云耀云服务…

深入理解传输层协议:TCP与UDP的比较与应用

目录 前言什么是TCP/UDPTCP/UDP应用TCP和UDP的对比总结 前言 传输层是TCP/IP协议栈中的第四层&#xff0c;它为应用程序提供服务&#xff0c;定义了主机应用程序之间端到端的连通性。在本文章&#xff0c;我们将深入探讨传输层协议&#xff0c;特别是TCP和UDP协议的原理和区别…

ES写入数据报错:retrying failed action with response code: 429

报错&#xff1a; 使用logstash导入分片数量为9的index发生错误,[logstash.outputs.elasticsearch] retrying failed action with response code: 429 ({"type">"es_rejected_execution_exception", "reason">"rejected execution …

在 .NET 8 Release Candidate 1 中推出 .NET MAUI:质量

作者&#xff1a;David Ortinau 排版&#xff1a;Alan Wang 今天&#xff0c;我们很高兴地宣布 .NET MAUI 在 .NET 8 Release Candidate 1 中已经可用&#xff0c;该版本带有适用于生产应用程序的正式许可证&#xff0c;因此您可以放心地将此版本用于生产环境。我们在 .NET 8 中…