124. Binary Tree Maximum Path Sum

本文深入探讨了寻找二叉树中最大路径和的算法实现,通过递归方式计算每个节点作为路径一部分时所能贡献的最大值,最终确定整棵树的最大路径和。算法巧妙地平衡了时间和空间复杂度,为解决此类问题提供了高效解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于每一节点,考虑从其左/右子树中的一点到这一个节点的路径所能形成的最大值。Math.max(left.val, right.val) + root.val,是经过这个节点为止的能形成的最大值的一条支路。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {  
    int maxSum = Integer.MIN_VALUE;  
      
    public int maxPathSum(TreeNode root) {  
        if(root == null)  
            return 0;  
              
        getMaxSumWithCurNode(root);  
        return maxSum;  
    }  
      
      
    int getMaxSumWithCurNode(TreeNode curNode){  
        int lmax = 0, rmax = 0;  
        int value = curNode.val; // 包含当前节点的最大路径和  
        if(curNode.left != null){  
            lmax = getMaxSumWithCurNode(curNode.left);  
        }  
        if(curNode.right != null){  
            rmax = getMaxSumWithCurNode(curNode.right);  
        }  
          
        value = value + (lmax>0?lmax:0) + (rmax>0?rmax:0) ;  
        if(value > maxSum)  
            maxSum = value;  
        // 注意这里的返回值,取左右子树其中一条路径      
        return curNode.val+Math.max( lmax>0?lmax:0, rmax>0?rmax:0 );  
          
    }  
}  

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值