思路:递归遍历二叉树中的每个节点,分别计算以当前节点为根节点的最大路径之和。ans中保存着计算过程中路径和最大的那个值,每遍历一个节点,ans都会进行比较一次,将较大值存入ans中。在helper函数中,返回值不是保存的最大值,这个也很好理解,这样并不会丢失最大值,因为ans是引用类型的, return max(left,right)+root->val;只是为了使上一层递归函数中计算left和right有一个正确的返回值。
/**
* 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 maxPathSum(TreeNode* root) {
int ans=INT_MIN;
helper(root,ans);
return ans;
}
int helper (TreeNode*root,int &ans)
{
if(!root) return 0;
int left=max(helper(root->left,ans),0);
int right=max(helper(root->right,ans),0);
ans=max(ans,left+right+root->val);
return max(left,right)+root->val;
}
};