思路:
不断地返回左右子树的两边的最大值,分清最大值和递归函数的返回值。
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int max_sum;
int maxPathSum(TreeNode *root) {
max_sum = INT_MIN;
dfs(root);
return max_sum;
}
int dfs(TreeNode *root)
{
if (root == NULL)
return 0;
int sum = root->val;
int leftVal = dfs(root->left);
int rightVal = dfs(root->right);
if (leftVal > 0)
sum += leftVal;
if (rightVal > 0)
sum += rightVal;
max_sum = max(max_sum, sum); //最大值
return max(r,l)>0 ? max(r, l)+root->val : root->data;
}
};