二叉树中的最大路径和
路径和:二叉树的任意两节点经过中间若干节点(当然也可能中间没有节点,另外单个节点也可看作路径,这里理解就好)形成一条路径,路径的和就是经过节点的值(val)的和

public class MaxPathSum {
static int maxSum=Integer.MIN_VALUE;
public static int maxPathSum(TreeNode root){
maxGain(root);
return maxSum;
}
public static int maxGain(TreeNode node){
if(node==null){
return 0;
}
int leftGain = Math.max(maxGain(node.left), 0);
int rightGain = Math.max(maxGain(node.right), 0);
int newPath=leftGain+ rightGain +node.val;
maxSum=Math.max(maxSum,newPath);
return node.val+Math.max(leftGain,rightGain);
}
public static void main(String[] args) {
TreeNode root = new TreeNode(-10);
root.left=new TreeNode(9);
root.right=new TreeNode(20);
root.right.left=new TreeNode(15);
root.right.right=new TreeNode(7);
System.out.println(maxPathSum(root));
}
}