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

news2025/1/17 3:44:20

题目

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

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

给你一个二叉树的根节点 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

解决思路

解决方法

    private var finalMax = Int.MIN_VALUE

    fun maxPathSum(root: TreeNode?): Int {
        dfs(root)
        return finalMax
    }

    fun dfs(root: TreeNode?): Int {
        if (root == null) {
            return 0
        }
        //左右两个子节点贡献值最小为0 如果是负数那么就直接不归属,相当于取0
        val maxLeft = dfs(root.left).coerceAtLeast(0)
        val maxRight = dfs(root.right).coerceAtLeast(0)
        var max = (maxRight + root.`val`).coerceAtLeast(maxLeft + root.`val`)
        //当前节点当作整个路径的最大值计算一下
        finalMax = finalMax.coerceAtLeast(maxLeft + maxRight + root.`val`)
        //返回的max表示当前节点的最大贡献值
        return max
    }
核心是注意当前节点的最大路径,与当前节点作为子节点时的贡献是两个不同的值

当前节点的最大路径: max(自己,自己+左边,自己+右边,自己 + 左边 + 右边)
当前节点作为子节点时的贡献:max(自己,自己+左边,自己+右边)
后者相对前者,少了左右都存在的情况。因为作为子节点时,一条路如果同时包含左右,
根就被包含了2次,不符合题目只出现一次的限制了。

总结

1.最近有些懈怠了,人还是需要鞭策的。
不然总是耗费大量时间玩游戏就不好了

2.这道题说难也不难,只是当时自己没有完全想明白咋回事。
还是看了题解做出来了。

3.才思泉涌的人,让我见个吧。真没见过多聪明的人。
高斯,爱因斯坦这种

4.人上了年纪,真的会又些好吃的没法吃了。
因为会掉牙。真咬不动。
切记古人的忠告:树欲停 而风不止 子欲养 而亲不待
父母恩情其实基本上儿女是回报不了的
父母把全部心血给了自己
自己成为父母后却不能把全部心血还给父母
因为还要培养下一代
就这样 恩情在一代代流传 ​​​

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

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

相关文章

IC698CRE040 GE 实现跨多个UPS设备的随处可见性

IC698CRE040 GE 实现跨多个UPS设备的随处可见性 通过人工智能、digital twin技术、由高级分析支持的人类洞察力以及独立于供应商的工业软件&#xff0c;效率和敏捷性正在发生巨大变化。施耐德电气通过为未来打造的弹性和可持续解决方案实现下一代工业自动化。 EcoStruxure自…

出现ZooKeeper JMX enabled by default这种错误的解决方法

系列文章专栏 学习以来遇到的bug/问题专栏 文章目录 系列文章专栏 前言 一 问题描述 二 解决方法 2.1 可能的原因分析 2.2 小编的问题解决方法 First&#xff1a;检查/etc/profile里面zookeeper的环境变量配置 Second&#xff1a;检查 zookeeper/conf/zoo.cfg里面的d…

拆解即时通讯行销,如何提升讯息开启率达300%?

图片来源&#xff1a;SaleSmartly官网 科技日新月异&#xff0c;今时今日商家均转战网络世界&#xff0c;开设网店售卖产品或服务&#xff0c;不少人都会转用即时通讯&#xff08;Instant Messaging&#xff0c;简称IM&#xff09;软件来和客户联络和宣传&#xff0c;因为即时通…

Unity3D 如何在ECS架构下,用Unity引擎进行游戏开发详解

前言 Unity3D是一款强大的游戏引擎&#xff0c;它提供了丰富的功能和工具&#xff0c;可以帮助开发者快速构建高质量的游戏。而Entity Component System&#xff08;ECS&#xff09;是Unity3D中一种新的架构模式&#xff0c;它可以提高游戏的性能和可扩展性。本文将详细介绍在…

自动化运维:Ansible脚本之playbook剧本

目录 一、理论 1.playbooks 2.YAML 3.使用ansible批量安装apache服务 4.定义、引用变量 5.指定远程主机sudo切换用户 6.when条件判断 7.迭代 8.Templates 模块 9.tags 模块 10.Roles 模块 二、实验 1.使用ansible批量安装apache服务 2.定义、引用变量…

S型曲线规划

s #include "stdio.h"typedef struct S_CTRL{ #define SSPD_BUF_LEN 100struct{float aMax;float aMin;float vMax;float J;/* 加加速度 */int t[7];int T[7];int tMax;}in;struct{float accBuf[SSPD_BUF_LEN];float decBuf[SSPD_BUF_LEN];long S[7];long V[7];}o…

电商API接口的研发和应用!

API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;指的是为不同的软件应用程序提供编程接口的一组协议、规则以及工具的集合&#xff0c;以便它们能够互相交互&#xff0c;实现数据通信和功能调用。API已成为了现代软件开发和商业应用…

Linux系统部署部署excalidraw-cn白板工具

Linux系统部署部署excalidraw-cn白板工具 一、excalidraw-cn介绍二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍2.3 Yarn介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本3.3 检查系统是否安装yarn 四、部署Node.js 环境4.1 下载Node.js安装包4.2 解压N…

Docker技术--Docker中的网络问题

1.docker中的网络通信 如果想要弄清楚docker中的网络通信问题,其实需要弄清楚这几个问题就可以:容器与容器之间的通信、容器与外部网络之间的通信、外部网络与容器之间的通信。 -a:容器与容器之间的通信,如下所示: 在默认情况下,docker使用网桥(Bridge模式)与NAT通信。这…

Java监听mysql的binlog 报错解决办法

报错&#xff1a;com.github.shyiko.mysql.binlog.network.AuthenticationException: Client does not support authentication protocol requested by server; consider upgrading MySQL client 解决方案&#xff1a;在mysql中执行以下命令 alter user rootlocalhost identi…

JS将对象转为字符串

使用JSON.stringify()将对象转换为字符串 var person {name: Jack,age: 27 }console.log("person&#xff1a;"); console.log(person);var result JSON.stringify(person);console.log("result&#xff1a;"); console.log(result); console.log(&qu…

3D模型轻量化引擎HOOPS平台助力3D开发实现大模型轻量化渲染、3D模型格式转换!

一、包含的软件开发工具包 HOOPS Web平台帮助开发人员构建基于Web的工程应用程序&#xff0c;提供高级3D Web可视化、准确快速的CAD数据访问和3D数据发布。 HOOPS Web平台包括三个集成软件开发工具包 (SDK)&#xff1a; &#xff08;1&#xff09;Web端3D可视化引擎 HOOPSCom…

python的csv库:保存数字仅有15位,精度丢失的解决办法

废话不多说&#xff0c; 如果在字符串后添加制表符‘/t’能够解决问题&#xff0c;那么这确实是一个有效的解决方案。制表符‘/t’在CSV文件中可以被视为分隔符&#xff0c;确保数据不会被自动格式化或截断。 import csvdata [#15位数字["123456789012345"],#16位数…

Java集合体系

Java集合体系 一、概念二、集合分类 - java.util1、单列集合&#xff1a;一条数据只有一列1.1 List集合1.2 Set集合 2、双列集合&#xff1a;一条数据有两列2.1 特点2.2 Map接口的常用方法2.3 Map接口的常用实现类2.3.1 HashMap&#xff1a;key元素无序2.3.2 LinkedHashMap&…

微信开发之一键踢出群聊的技术实现

简要描述&#xff1a; 删除群成员 请求URL&#xff1a; http://域名地址/deleteChatRoomMember 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选…

02 字母异位词分组

字母异位词分组 题解 哈希 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 题解 哈希 class Solution { public:vector<vector<string>> groupAnagram…

计网(第四章)(网络层)(六)

一、路由选择协议&#xff08;动态路由自动获取路由信息&#xff09;概述&#xff1a; 之前有提到过路由条目分为静态和动态两种。相应地&#xff0c;路由选择也就有静态和动态两种。 在第五节&#xff08;计网第四章&#xff08;网络层&#xff09;&#xff08;五&#xff0…

unapp 开发微信小程序 使用wx.createSelectorQuery()时候一直获取不到元素信息。

在自定义组件中&#xff0c;使用wx.createSelectorQuery() 不能用wx. 而是this.createSelectorQuery() 微信文档&#xff1a; 但是在uni的官方文档中并没有关于需要切换this的介绍&#xff0c;是用uni.createSelectorQuery()在自定义组件内部也是无效的。 以下是我在项目中使用…

【前端】常用功能合集

目录 js跳转到新标签打开PDF文件js每十个字符换行 es6用表达式或变量名作为对象的属性名 vuev-for插值、:style、:class父组件加载完后再加载子组件keep-alive缓存跨域请求第三方接口跨域请求之callback&#xff08;不建议&#xff09;读取本地文件浏览器播放提示音audio jquer…

【【萌新的STM32学习-19-蜂鸣器实验】】

萌新的STM32学习-19-蜂鸣器实验 STM32在正点原子的视频中并未讲述关于蜂鸣器的实验&#xff0c;我们自己探究一下作为简单的HAL库入门 蜂鸣器每隔 300ms 响或者停一次。LED0 每隔 300ms 亮或者灭一次。LED0 亮的时候蜂鸣器不叫&#xff0c;而 LED0 熄灭的时候&#xff0c;蜂鸣…