算法列表

124.二叉树的最大路径和 困难

布莱克2026-04-22 13:51二叉树

问题:

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

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

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

示例 1:

输入:root = [1,2,3]
输出:6
解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6

示例 2:

输入:root = [-10,9,20,null,null,15,7]
输出:42
解释:最优路径是 15 -> 20 -> 7 ,路径和为 15 + 20 + 7 = 42

回答:

递归遍历二叉树,得到左子树的最大和,和右子树的最大和,如果左子树或右子树结果为负数,舍弃结果取0,和当前节点值进行相加

var maxPathSum = function(root) {
    let max = -Infinity;
    var dfs = function(root) {
        if (!root) return 0;
        //如果值小于0,则直接舍去结果 取0,保证最后的结果要大
        let leftVal = Math.max(dfs(root.left), 0);
        let rightVal = Math.max(dfs(root.right), 0);
        let current = root.val + leftVal + rightVal;
        max = Math.max(max, current);
        //当前节点的最大路径
        return Math.max(leftVal, rightVal) + root.val;
    }
    dfs(root);
    return max;
};


assistant