news 2026/4/29 11:38:35

力扣刷题:二叉树中的最大路径和

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣刷题:二叉树中的最大路径和

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

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

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

解析:
这道题使用递归来解题,重点是递归逻辑的设计以及返回值:
在当前节点(需要拐弯的那个节点)的路径和 = 左子树的最长路径和 + 右子树的最长路径和 + 当前节点的值
返回给父节点的是:
以当前节点为根节点的子树的最长路径和 + 当前节点的值
注意:
如果子树的和是负数,我们宁愿不选择这个子树,比如一个节点值是-10,左子树贡献-5,右子树贡献-3,最好的选择是都不要,返回0

具体代码:

/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null : right) * } *//** * @param {TreeNode} root * @return {number} */varmaxPathSum=function(root){// 全局变量,用于记录整个树中的最大路径和// 初始化为负无穷,确保第一次比较时能被任何节点值更新letans=-Infinity/** * 深度优先搜索函数,递归计算每个节点的贡献值 * @param {TreeNode} node - 当前处理的节点 * @return {number} - 返回当前节点能向上贡献的最大路径和 */functiondfs(node){// 递归终止条件:空节点贡献值为0if(node===null){return0}// 递归计算左子树的最大贡献值// left表示:以node.left为起点的最大单向路径和constleft=dfs(node.left)// 递归计算右子树的最大贡献值// right表示:以node.right为起点的最大单向路径和constright=dfs(node.right)// 关键更新:以当前node为根节点的最大路径和// 这种情况考虑以node作为"转折点"的完整路径:// 可以包含左子树 + 当前节点 + 右子树// 这种情况不能向上传递给父节点,所以只用于更新全局答案ans=Math.max(ans,left+right+node.val)// 关键返回:当前节点能向上贡献的最大路径和// 这个返回值会被父节点使用,所以只能选择一边:// 1. Math.max(left, right) + node.val:选择左或右子树中更大的那个,加上当前节点// 2. 与0比较:如果贡献值是负数,就不选择这个子树(贡献0)// 这个返回值表示:从当前节点向上的单边最大路径和returnMath.max(Math.max(left,right)+node.val,0)}// 从根节点开始深度优先搜索dfs(root)// 返回整个树中的最大路径和returnans}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 5:18:03

吉利星越L:lora-scripts生成都市青年生活方式图

吉利星越L:LoRA-Scripts生成都市青年生活方式图 在数字营销的战场上,一张能精准击中目标人群情绪的视觉图像,往往胜过千言万语。尤其对于“都市青年”这一标签模糊却又极具消费力的群体,品牌如何通过内容建立共鸣?传统…

作者头像 李华
网站建设 2026/4/23 18:43:06

哔哩哔哩汽车区:lora-scripts生成测评开场动画

哔哩哔哩汽车区:LoRA脚本自动化生成测评开场动画 在B站汽车区,一个现象正悄然改变内容创作的格局——越来越多的UP主开始用AI“定制”自己的品牌视觉语言。你有没有注意到,那些高播放量的汽车测评视频,开场几秒内总有一套极具辨识…

作者头像 李华
网站建设 2026/4/29 10:33:21

修复Langchain-123k实时信息获取问题

一、问题深度剖析:Langchain-123k 在实时信息获取上的根本缺陷 1.1 问题本质:静态知识库与动态信息需求的矛盾 Langchain-123k 作为一个基本面研究框架,其核心设计基于传统的RAG(检索增强生成)架构。经过深入分析,我发现其无法连接线上最新信息的问题根源在于以下几个方…

作者头像 李华
网站建设 2026/4/23 6:15:21

STM32CubeMX安装项目应用:点亮第一个LED前准备

从零开始点亮LED:STM32开发环境搭建实战指南 你有没有过这样的经历?手握一块STM32开发板,满心期待地想“点亮第一个LED”,结果却卡在第一步——不知道从哪开始。是直接打开Keil写代码?还是先查数据手册配时钟&#xf…

作者头像 李华
网站建设 2026/4/21 2:36:22

C++26契约编程核心机制揭秘(pre条件实战精要)

第一章:C26契约编程pre条件概述C26引入的契约编程(Contracts)机制旨在提升代码的可靠性和可维护性,其中pre条件作为契约的重要组成部分,用于规定函数执行前必须满足的前提约束。通过在函数入口处声明pre条件&#xff0…

作者头像 李华
网站建设 2026/4/19 11:37:10

揭秘C++26 std::future链式调用:如何构建高效异步任务流水线

第一章:C26 std::future链式调用概述C26 标准引入了对 std::future 的链式调用支持,显著增强了异步编程的表达能力与可读性。开发者现在可以通过连续的方法调用来组合多个异步操作,而无需嵌套回调或手动管理线程同步。链式调用的设计目标 该特…

作者头像 李华