/**
* 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 {
private int maxRes = Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
process(root);
return maxRes;
}
private int process(TreeNode root){
if(root == null){
return 0;
}
//计算左边分支最大值,左边分支如果为负数还不如不选择
int left = Math.max(0,process(root.left));
//计算右边分支最大值,右边分支如果为负数还不如不选择
int right = Math.max(0,process(root.right));
//保存当前节点与当前节点双边的和 与历史最大值作比较
maxRes = Math.max(maxRes, root.val + left + right);
//返回经过root的单边最大分支给当前root的父节点计算使用
return root.val + Math.max(left,right);
}
}