Shu-How Zの小窝

Loading...

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

/**
 * @param {TreeNode} root
 * @return {number}
 */
// 子树的最大路径和 = 左子树提供的最大路径和 +根节点值 + 右子树的的最大路径和,
// 分别递归遍历左子树和右子树的最大路径和,两者之前取一个最大值;返回;
// 最后里面,要注意最后得出的是一个负数,直接返回0;否则正常的数据就直接返回;
var maxPathSum = function(root) {
    let maxSum = -Infinity;//最大路径和
    function dfs(root){
        if(!root) return 0;
        let left=dfs(root.left)
        let right=dfs(root.right)  
        // 当前子树内部最大路径和
        let currentMaxSum=root.val+left+right
        maxSum=Math.max(maxSum,currentMaxSum)//挑战最大紀录
        //当前子树外部的最大路径和:小于0的情况
        let currentPathMaxSum=root.val+Math.max(left,right)//当前子树对外提供的路径和
        //如果对外提供的路径和小于0,直接返回6:否则正常返回
        return currentPathMaxSum<0?0:currentPathMaxSum
    }
    dfs(root)
    return maxSum
};
var maxPathSum = function(root) {
    let maxSum = -Infinity;

    function dfs(node) {
        if (!node) return 0;

        // 递归计算左右子树的最大贡献值,忽略负数贡献
        let leftGain = Math.max(0, dfs(node.left));
        let rightGain = Math.max(0, dfs(node.right));

        // 更新最大路径和,考虑当前节点作为路径的一部分
        maxSum = Math.max(maxSum, node.val + leftGain + rightGain);

        // 返回当前节点对外提供的最大路径和
        return node.val + Math.max(leftGain, rightGain);
    }

    dfs(root);
    return maxSum;
};
class TreeNode {
    constructor(val, left = null, right = null) {
      this.val = val;
      this.left = left;
      this.right = right;
    }
  }
// 构建测试用例
// let arrRoot = [-10,9,20,null,null,15,7];
// let arrRoot = [1,2,3];
let arrRoot = [-3];
let root = buildTree(arrRoot);
function buildTree(arr) {
    if (arr.length === 0) return null;
    let root = new TreeNode(arr[0]);
    let queue = [root];
    for (let i = 1; i < arr.length; i++) {
        let node = queue.shift();
        if (i * 2 - 1 < arr.length) {
            node.left = new TreeNode(arr[i * 2 - 1]);
            queue.push(node.left);
        }
        if (i * 2 < arr.length) {
            node.right = new TreeNode(arr[i * 2]);
            queue.push(node.right);
        }
    }
    return root;
}
console.log(maxPathSum(root));

posted @ 2025-01-04 16:14  KooTeam  阅读(26)  评论(0)    收藏  举报