题目链接:https://leetcode.com/problems/binary-tree-maximum-path-sum/#/description
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int maxSum=0;
int maxPathSum(TreeNode* root) {
if(root==NULL) return 0;
// 保存最大值
maxSum=root->val;
getMaxSum(root);
return maxSum;
}
int getMaxSum(TreeNode* root){
int l=-1<<29,r=-1<<29;
// 获得左右的最大和;
if(root->left) l=getMaxSum(root->left);
if(root->right) r=getMaxSum(root->right);
int v=root->val;
// 总共6种情况可能产生最大值:v,l,r,v+l,v+r,v+l+r;
// v,v+r,v+l,这三种情况的最大值,是向上连接,可能和父节点产生更大的和
int ans=max(v,max(v+l,v+r));
int Max=max(max(ans,v+l+r),max(l,r));
if(maxSum<Max) maxSum=Max;
return ans;
}
};