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

leetcode124-二叉树中的最大路径和

leetcode 124
在这里插入图片描述

思路

一、问题拆解与核心逻辑

  1. 路径的两种形态
    • 形态 1:路径经过当前节点,且向左右子树分叉(如左子树→当前节点→右子树)
    • 形态 2:路径以当前节点为端点,向上延伸(如当前节点→左子树 或 当前节点→右子树)
  2. 递归的核心目标
    对每个节点,计算以该节点为端点的最大路径和(用于向上传递给父节点)
    同时,计算经过该节点的最大路径和(可能包含左右子树的分叉路径),并更新全局最大值

二、递归函数的设计

  1. 函数定义
    deep(root):返回以root为根的子树中,从root出发向下延伸的最大路径和(仅能选左子树或右子树中的一条分支,或不选分支)
  2. 递归逻辑
    • 终止条件:若root为null,返回 0(空节点不贡献值)
    • 递归处理子树:计算左子树和右子树的最大向下路径和left和right
    • 更新全局最大值:经过root的路径和可能为left + right + root.val(左右子树分叉路径),与当前全局最大值比较并更新
    • 返回值:root能向上传递的最大路径和为root.val + max(left, right, 0)(若子树贡献为负,则不选该子树,取 0)

三、关键细节与边界情况

  1. 负数处理
    若子树的最大贡献为负数,应舍弃该子树(取 0),避免拉低路径和。例如:节点值为 5,左子树贡献 - 3,右子树贡献 - 2,则向上传递的路径和为 5(5 + 0)
  2. 单节点树
    当树中只有一个节点时,最大路径和为该节点的值
  3. 全局变量的作用
    全局变量maxSum用于记录所有可能路径中的最大值,避免递归返回值仅能传递单边路径的限制

实现

var maxPathSum = function (root) {let max = -Infinity;const deep = (root) => {if (!root) return 0;const left = Math.max(0, deep(root.left));const right = Math.max(0, deep(root.right));// 中const curVal = root.val + left + right;max = Math.max(max, curVal)return root.val + Math.max(left, right);}deep(root)return max;
};
http://www.dtcms.com/a/263926.html

相关文章:

  • CPU缓存一致性
  • AI智能体在用户行为数据分析中有哪些应用?
  • 具身多模态大模型在感知与交互方面的综述
  • (十一)Spring WebSocket
  • Ansys Speos | Speos Camera 传感器机器视觉示例
  • vue-35(使用 Jest 和 Vue Test Utils 设置测试环境)
  • 列表元素滚动动画
  • LAN8720 寄存器概览和STM32 HAL库读写测试
  • CSS 安装使用教程
  • FreeRTOS任务切换
  • 力扣网C语言编程题:寻找两个正序数组的中位数
  • RIP 技术深度解析
  • 文心一言开源版测评:能力、易用性与价值的全面解析
  • [创业之路-457]:企业经营层 - 蓝海战略 - 价值创新不仅仅是技术创新
  • Java项目:基于SSM框架实现的智慧养老平台管理系统【ssm+B/S架构+源码+数据库+毕业论文】
  • 大麦基于HarmonyOS星盾安全架构,打造全链路安全抢票方案
  • 【机器学习深度学习】模型微调的基本概念与流程
  • 06会话管理
  • 前端计算机视觉:使用 OpenCV.js 在浏览器中实现图像处理
  • 量化选股策略 聚宽
  • 如何利用Charles中文版抓包工具提升API调试与网络性能
  • 二刷 苍穹外卖day10(含bug修改)
  • 如何使用StartUML绘制类图,用例图,时序图入门
  • 转录组分析流程(二):差异分析
  • MySQL MVCC 详解
  • ChatGPT使用限额记录与插件统计
  • 杭州来未来科技 Java 实习面经
  • [C#] WPF - 自定义样式(Slider篇)
  • 【Hive SQL优化完全指南:从0.x到4.x的性能进化之路】
  • c# IO密集型与CPU密集型任务详解,以及在异步编程中的使用示例