给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
示例 1:
输入: [1,2,3]
1
/ \
2 3
输出: 6
示例 2:
输入: [-10,9,20,null,null,15,7]
-10
/ \
9 20
/ \
15 7
输出: 42
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型
*/
private int max=Integer.MIN_VALUE;
public int maxPathSum (TreeNode root) {
maxSum(root);
return max;
}
public int maxSum(TreeNode root){
if(root==null){
return 0;
}
//递归左边右边,保证大于0,max(a,0)
int leftMax=Math.max(maxSum(root.left),0);
int rightMax=Math.max(maxSum(root.right),0);
//最大值不断更新
max = Math.max(max, leftMax + rightMax + root.val);
//返回的是
return root.val+Math.max(leftMax,rightMax);
}
}