题目描述
给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少。
这个路径的开始节点和结束节点可以是二叉树中的任意节点
例如:
给出以下的二叉树,
返回的结果为6
示例1
输入
{-2,1}
返回值
1
示例2
输入
{-2,#,-3}
返回值
-2
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
int maxSum = Integer.MIN_VALUE;
/**
*
* @param root TreeNode类
* @return int整型
*/
public int maxPathSum (TreeNode root) {
if(root == null){
return 0;
}
getMax(root);
return maxSum;
}
public int getMax(TreeNode root){
if(root == null){
return 0;
}
//因为节点的值可以为负数,所以最大值取0和子树值的较大者
int leftMax = Math.max(0,getMax(root.left));
int rightMax = Math.max(0,getMax(root.right));
//如果将当前root作为根节点,那么最大值是root.val+左子树最大值+右子树最大值
maxSum = Math.max(maxSum,root.val+leftMax+rightMax);
//只能返回左右子树中较大值加上root.val
return Math.max(0,root.val + Math.max(leftMax,rightMax));
}
}