【 每天学习一点算法 2026/05/19】二叉树中的最大路径和

每天学习一点算法 2026/05/19

题目:二叉树中的最大路径和

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

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

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

我们以一个中间节点为例,它的所经过的路径只有三种情况:链接左侧子节点,链接右侧子节点,链接两边子节点。所以我们只需要递归获取每个节点这三种情况的最大值,然后再去除所有最大值中的最大值即可。

typescript 复制代码
function maxPathSum(root: TreeNode | null): number {
  let max = -Infinity // 因为节点值可能为负值,所有初始值设为负无穷
  // 辅助递归遍历函数
  function helper (root: TreeNode | null): number {
    if (root === null) return 0 // 遍历到叶子节点开始回归
    const left = Math.max(helper(root.left), 0) // 回归返回值小于0的情况不用参与选择
    const right = Math.max(helper(root.right), 0) // 回归返回值小于0的情况不用参与选择
    const all = root.val + left + right // 链接两侧路径和
    const one = Math.max(left, right) + root.val // 只选一侧最大路径和
    max = Math.max(all, one, max) // 计算并存储截至此节点最大路径和
    return one // 只有选一边才能继续计算,返回选一侧最大路径和到上一层
  }
  helper(root) // 初始传入根节点
  return max // 返回最大路径和
};

题目来源:力扣(LeetCode)

相关推荐
油丶酸萝卜别吃2 小时前
前端转全栈学习路线
前端·学习
江畔柳前堤3 小时前
大语言模型分布式训练:从并行策略到万卡工程的系统梳理
人工智能·分布式·深度学习·算法·目标检测·机器学习·语言模型
Forever Nore4 小时前
LeetCode 4 寻找两个正序数组的中位数 - 二分
算法·leetcode
罗西的思考5 小时前
【OpenClaw具身硬件】MiniClaw 阅读笔记---(1)基础
人工智能·算法·机器学习
GlueNa2SiO36 小时前
第十八章 Linux故障排查与恢复
linux·服务器·笔记·学习
蛋先生DX6 小时前
大模型参数存储格式揭秘:BF不是男朋友
深度学习·算法·llm
weixin_431600446 小时前
NestJS 入门(3):Guard 如何挡住未登录请求?
前端·后端·学习·nest.js
带娃的IT创业者6 小时前
DeepTutor:当 Agent-Native 架构撞上个性化学习的临界点
学习·架构·ai agent·大模型应用·个性化学习·教育技术·agent-native架构
爱跳舞的烤冷面7 小时前
自学嵌入式第22天(数据结构——哈希)
数据结构·算法·哈希算法
猎嘤一号7 小时前
博弈论(Game Theory)的理论、算法与工程
人工智能·算法·安全·博弈论