Given a binary tree, find the maximum path sum.
The path may start and end at any node in the tree.
For example:
Given the below binary tree,
1 / \ 2 3
Return 6
.
/**
* 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 maxPathSum(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int max_sum = INT_MIN;
return max(maxSum(root,max_sum),max_sum);
}
int maxSum(TreeNode* root,int& max_sum)
{
if(root == NULL) return 0;
int left_sum = maxSum(root->left,max_sum);
int right_sum = maxSum(root->right,max_sum);
int sum1 = root->val + max(0, max(left_sum,right_sum));
int sum2 = root->val + left_sum + right_sum;
max_sum = max(max_sum, max(sum1,sum2));
return sum1;
}
};
144 milli secs