首页 > 其他分享 >124.二叉树中的最大路径和

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

时间:2025-01-04 16:23:43浏览次数:7  
标签:right 路径 子树 let 二叉树 124 root left

/**
 * @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));

标签:right,路径,子树,let,二叉树,124,root,left
From: https://www.cnblogs.com/KooTeam/p/18652039

相关文章

  • 编程题-二叉树的中序遍历
    题目:给定一个二叉树的根节点root,返回它的中序 遍历。解答一(递归):首先我们需要了解什么是二叉树的中序遍历:按照访问左子树——根节点——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候我们按照同样的方式遍历,直到遍历完整棵树。因此整个遍历过程天然具有递归的......
  • LeetCode 64. 最小路径和
    题目:64.最小路径和给定一个包含非负整数的mxn网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。思路:多维的动态规划。最小路径和,当前格子的步数是固定的,走到上一步的路径和取小的。当前格子的步数是固定的......
  • 毕设如何选题:开题报告+计算机视觉项目大集合(图像分类+目标检测+目标跟踪+姿态识别+
    #毕设选题-开题报告-计算机视觉项目大集合如链接失效,请主页搜索关键词直达!计算机视觉项目大集合yolo系列及创新点和应用(测距测速等):改进的yolo目标检测-测距测速图像去雨去雾+目标检测+测距项目交通标志识别项目yolo系列-重磅yolov9界面-最新的yoloyolov8双目......
  • 计算机视觉实战项目4(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人
    往期热门项目回顾:链接失效,请主页搜索关键词!!!!计算机视觉项目大集合改进的yolo目标检测-测距测速路径规划算法图像去雨去雾+目标检测+测距项目交通标志识别项目yolo系列-重磅yolov9界面-最新的yolo姿态识别-3d姿态识别深度学习小白学习路线AI健身教练-引体向上-......
  • 【国际化战略】出海架构搭建——企业如何布局海外投资架构?(单层架构、多层架构、投资路
    中国企业出海的历史可以追溯到改革开放初期,从最初的简单产品出口逐步演变为品牌全球化的过程。如今,品牌化成为中国企业出海的大势所趋,华为、字节跳动等企业加速全球化进程角,独兽企业的海外扩张意愿显著增强。这一转变不仅反映了中国经济的快速发展和国际影响力的提升,也体现了企业......
  • uni-app 资源引用(绝对路径和相对路径)方法汇总
    ......
  • 250103.openEuler欧拉安装Jenkins并修改构建workspace路径
    1.安装Jenkinswget-O/etc/yum.repos.d/jenkins.repohttps://pkg.jenkins.io/redhat-stable/jenkins.repo--no-check-certificaterpm--importhttps://pkg.jenkins.io/redhat-stable/jenkins.io-2023.keyyuminstall-yfontconfigjava-17-openjdkdnf-yinstalljenk......
  • 探索新路径:金融行业如何借助内部知识库实现智能转型
    引言在数字化转型的浪潮中,金融行业正经历着前所未有的变革。随着大数据、人工智能等技术的飞速发展,金融机构不仅需要提升服务效率,更要优化内部管理,以创新驱动业务增长。内部知识库作为信息管理与知识分享的核心平台,正逐渐成为金融行业智能转型的关键驱动力。本文将探讨金融行业如......
  • 练习6-1 堆中的路径
    将一系列给定数字插入一个初始为空的最小堆h。随后对任意给定的下标i,打印从第i个结点到根结点的路径。输入格式:每组测试第1行包含2个正整数n和m(≤103),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[−104,104]内的n个要被插入一个初始为空的......
  • 124K小工具,嘎嘎好用!
    点击蓝字关注我作者|风雨软件前言如果当你正在玩游戏玩到起劲的时候,突然按键失灵,这个时候你又没有多余的键盘备用。怎么办?是不是很抓狂!其实解决办法很简单,把不经常用的按键改成你失灵的按键就行了。今天,我就来为大家介绍一款特别实用的小工具——KeyboardShield    ......