🧩Algo 二叉树

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

难度:🔴 Hard | 标签:树、DFS | 状态:⬜ LeetCode 链接

思路

每个节点:

  • 返回值:以本节点为端点向下的最大单边贡献 = max(0, max(left, right)) + val
  • 答案:经过本节点的最长路径 = left + right + val

负贡献裁剪:单边 < 0 时取 0(不选这一支)。

代码

class Solution {
    int best = INT_MIN;
    int dfs(TreeNode* r) {
        if (!r) return 0;
        int l = max(0, dfs(r->left));
        int rt = max(0, dfs(r->right));
        best = max(best, l + rt + r->val);
        return max(l, rt) + r->val;
    }
public:
    int maxPathSum(TreeNode* root) {
        dfs(root);
        return best;
    }
};

复杂度

  • 时间 O(n),空间 O(h)

易错 / 回顾

  • best 初始 INT_MIN(节点值可能全负)
  • 返回值是”单边”,更新答案是”双边”——两套不要混
  • 单边贡献用 max(0, ...) 裁掉负数
Related · 二叉树