LeetCode 124. 二叉树中的最大路径和(Hard)

LeetCode 124. 二叉树中的最大路径和(Hard)

📌 题目链接


💡 解题思路

一、什么是"路径"

题目要求的是 任意节点组成的一条路径,路径满足:

  • 至少包含一个节点
  • 不一定经过根节点
  • 节点只能经过一次
  • 路径可以是:
    • 左子树 → 当前节点 → 右子树
    • 左子树 → 当前节点
    • 当前节点 → 右子树
    • 单个节点

二、核心难点

递归返回值 ≠ 全局答案

  • 递归函数只能返回 "向上延伸的路径"
  • 不能返回"拐弯的路径"
  • 但 全局最大值 可以来自"拐弯路径"

🌳 递归设计

1️⃣ 递归函数定义

java 复制代码
int dfs(TreeNode node)

含义:

返回以 node 为起点,向下走(只能选一条分支)的最大路径和


2️⃣ 递归逻辑

对于当前节点 node:

java 复制代码
int l = dfs(node.left);  // 左子树最大贡献
int r = dfs(node.right); // 右子树最大贡献
✅ 更新全局答案
java 复制代码
ans = max(ans, l + r + node.val);

这表示:

  • 当前节点作为路径最高点
  • 同时连接左右子树
✅ 向上返回
java 复制代码
return max(max(l, r) + node.val, 0);

📌 为什么要和 0 取 max?

  • 如果子树贡献为负,不如不选
  • 保证路径和不会被拖垮

🧩 完整代码(Java)

java 复制代码
class Solution {
    private int ans;

    public int maxPathSum(TreeNode root) {
        ans = Integer.MIN_VALUE;
        dfs(root);
        return ans;
    }

    private int dfs(TreeNode node) {
        if (node == null) return 0;

        int l = dfs(node.left);
        int r = dfs(node.right);

        // 以当前节点为最高点的路径
        ans = Math.max(ans, l + r + node.val);

        // 向上返回(只能选一条分支)
        return Math.max(Math.max(l, r) + node.val, 0);
    }
}

⏱ 复杂度分析

指标 复杂度 说明
时间复杂度 O(n) 每个节点只访问一次
空间复杂度 O(h) 递归栈深度
  • 平衡树:O(log n)
  • 链状树:O(n)

🔍 易错点总结

易错点 正确做法
返回左右子树之和 ❌ 不能返回给上层
忽略负数 ✅ 与 0 取 max
忘记更新全局变量 ✅ 必须在递归中更新
认为路径必须过根 ❌ 任意位置均可

✅ 一句话总结

递归负责"向上传",全局变量负责"记录拐点";
二叉树最大路径和 = 左贡献 + 右贡献 + 当前节点。

相关推荐
?abc!8 分钟前
(数组)581. 最短无序连续子数组
数据结构·算法·leetcode
小郎君6583 小时前
MPTT树复选框的半选状态:一棵百万节点树从递归到计数器,再到区间覆盖
算法
酌沧3 小时前
MemT让记忆成为模型内生能力
jvm·人工智能·算法
hold?fish:palm3 小时前
40 二叉树的直径
c++·leetcode
Shimeri3 小时前
越卷越像:我用遗传算法做了个"内卷"实验
算法·three.js·数据可视化·遗传算法·进化算法
Evand J4 小时前
【PMSM例程1】永磁同步电机(PMSM)转速与转子电角度观测算法|基于扩展卡尔曼滤波(EKF)的传感器状态估计与误差。附下载链接
算法·电机·1024程序员节·卡尔曼滤波
guo_wen_qiang4 小时前
二叉树的层序遍历-使用双端队列Deque
算法·leetcode·1024程序员节
爱读书的小胖4 小时前
LeetCode 55 跳跃游戏 C 语言解题分析
c语言·数据结构·算法·leetcode·1024程序员节
CCblandy4 小时前
前缀缓存命中率不靠引擎靠排列:本机仿真 3 轮,易变字段放开头 98.0%→0.0%
人工智能·python·算法·自然语言处理·性能优化
上班摸鱼下班游戏4 小时前
Unity 仿生智能算法 从蚁群算法 开始
算法·unity·游戏引擎