news 2026/4/16 14:48:12

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
hot100 124.二叉树中的最大路径和

1.思路:本题和543.二叉树的直径类似。

(1)链:从下面的某个节点(不一定是叶子节点)到当前节点的路径,这条链的节点值之和即为dfs的返回值。如果节点值之和是负数,则返回0(因为要和0取最大值)。

(2)直径:等价于由两条(或者一条)链拼成的路径。我们枚举每个node,假设直径在这里“拐弯”,也就是计算由左右两条从下面的某个节点(不一定是叶子节点)到node的链的节点值之和,然后去更新答案的最大值。

2.注意:dfs返回的是链的节点值之和,不是直径的节点值之和。

3.疑问:如果节点值都是负数,会得出什么结果?

答:如果所有节点值都是负数,那么就是要求最大节点值(即绝对值最小的负数)。因为在所有节点值都为负数的情况下,路径中只有一个最大节点值(即绝对值最小的负数)是最优的,毕竟随着节点数量的增多,路径和只会减小,此时求出来的最大路径和就是max(nums)。

递归三部曲:

1.确定递归函数的参数和返回值类型:

(1)参数:根节点root。

(2)返回值类型:返回最大路径和,为int类型。

(3)全局变量:ans,记录最大路径和。

private int ans = Integer.MIN_VALUE; public int maxPathSum(TreeNode root)

2.确定终止条件:如果节点为空,则返回0。不存在节点的话最大路径自然是0。

if(node == null){ return 0; }

3.确定单层递归的逻辑:因为求最大路径和要先知道左子树和右子树的链长,因此采用后序遍历的顺序,先递归左右子树,再求最大路径和。

int left = dfs(node.left); int right = dfs(node.right); // 计算全局答案,计算以当前节点为根的最大路径和,因此可以返回两条链 ans = Math.max(ans,left + right + node.val); // 是递归过程,只需返回从左子树或右子树到当前节点的最大路径链给上层,是告诉父节点,从我这个节点往下走,能得到的最大链和是多少 return Math.max(Math.max(left,right) + node.val,0);

复杂度分析:

(1)时间复杂度:O(n),其中n为二叉树的节点个数。

(2)空间复杂度:O(n),最坏情况下,二叉树会退化成一条链,递归需要O(n)的栈空间。

附代码:

class Solution { private int ans = Integer.MIN_VALUE; public int maxPathSum(TreeNode root) { dfs(root); return ans; } private int dfs(TreeNode node){ if(node == null){ return 0; } int left = dfs(node.left); int right = dfs(node.right); // 计算全局答案,计算以当前节点为根的最大路径和,因此可以返回两条链 ans = Math.max(ans,left + right + node.val); // 是递归过程,只需返回从左子树或右子树到当前节点的最大路径链给上层,是告诉父节点,从我这个节点往下走,能得到的最大链和是多少 return Math.max(Math.max(left,right) + node.val,0); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 10:14:36

前端技术架构详解:Vue 3 + TypeScript + Vite 在具身 AI 系统中的实践

目录 前言1 为什么前端在 AI 具身系统中如此关键1.1 前端不只是“页面”,而是交互中枢1.2 实时性与复杂状态管理的双重挑战 2 整体前端架构分层设计2.1 分层设计的总体思路2.2 组件层:界面与交互承载2.3 Services 服务层:外部能力的统一封装2…

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

【路径规划】基于快速扩展随机树RRT规划器实现机器人在在网格内找到从指定起始区域到目标区域的路径,同时避开沿途障碍物附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 👇 关注我领取海量matlab电子书和数学建模资料 &#…

作者头像 李华
网站建设 2026/4/16 10:41:48

Java毕设选题推荐:基于springboot的小区公共收益管理系统小区电梯广告、公共车位、场地租赁【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/16 12:59:24

JVM定义

JVM定义内容概述JVM(Java虚拟机)是Java实现跨平台的基石。其工作流程为:程序运行前,通过编译器将Java源代码文件编译成Java字节码文件;程序运行时,JVM对字节码文件进行逐行解释,翻译成机器码指令…

作者头像 李华
网站建设 2026/4/16 12:21:02

如何高效查询海量IP归属地?大数据分析中的IP查询应用

在大数据分析的过程中,海量数据的处理与分析往往是决定最终结果质量的关键。而IP地址作为互联网通讯中每个设备的“身份证”,包含了大量与用户位置、行为、需求等相关的关键信息。对于企业和开发者来说,了解并高效查询这些IP数据,…

作者头像 李华