第124题:二叉树中的最大路径和

解题思路

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

提供给父节点的最大路径值V:
提供给父节点的最大路径值.png

解决该题的关键在于搞清楚SB和VB的区别和联系。
其中S^B = B+max(V^D ,0)+max(V^E,0) , 而V^B = B+max(max(V^D ,0),max(V^E,0)),这二者之间的区别在于:
S^B:B的最大路径和 = B的值+D所能提供的最大路径值+E所能提供的最大路径值。
V^B:B所能提供给其父节点A的最大路径值=B的值+D和E中所能提供给B的最大路径值的更大的值。

格式中反复用到max函数将所能提供给父节点的最大路径值与0做比较,是因为如果其小于0,那么加进去路径值反而会变小,所有不加(即加0)。

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
//运行时间:1ms , 内存消耗:40.2MB
    private int sum = Integer.MIN_VALUE;  //要使sum的初始值足够小,保证第28行语句执行后sum的值会变化
    public int maxPathSum(TreeNode root) {
           value(root);
           return sum;
    }
      //计算node提供给父节点的最大路径值
     public int value(TreeNode node){
           if(node == null) return 0;
           int left_value = Math.max(value(node.left),0);  //node左节点可以提供的最大路径值,若为负数,则不加
           int right_value = Math.max(value(node.right),0);//node左节点可以提供的最大路径值
           //节点的最大路径和,留下所有节点中最大的路径和
           sum = Math.max(node.val+left_value+right_value,sum);  

           return node.val+Math.max(left_value,right_value);

     }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值