124 二叉树中的最大路径和
/*
递归
*/
class Solution {
//记录整棵树的最大路径和
int maxSum = Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
maxGain(root);
return maxSum;
}
/*
计算该结点的最大贡献值
*/
public int maxGain(TreeNode node){
if(node == null){
return 0;
}
//分别计算左右子树的最大贡献值,只要比0大的值
int leftSum = Math.max(maxGain(node.left), 0);
int rightSum = Math.max(maxGain(node.right), 0);
int curSum = node.val + leftSum + rightSum;
//更新结果
maxSum = Math.max(maxSum, curSum);
return node.val + Math.max(leftSum, rightSum);
}
}
做树的题目,要学会使用递归(只考虑当前这一层,算好出口即可)