
/**
* 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 ans=INT_MIN;
int dfs(TreeNode*root)
{
if(!root)return 0;//根节点为空返回0;
auto left=dfs(root->left);
auto right=dfs(root->right);
ans=max(left+right+root->val,ans);//最大值为左子树+右子树+根的值
return max(0,max(root->val+left,root->val+right));//返回值是0,左子树+根节点,右子树+根节点三者取最大。
}
int maxPathSum(TreeNode* root) {
dfs(root);
return ans;
}
};