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
.
int maxPathSum(TreeNode *root) {
int nMax = root->val;
maxPathSum(root, nMax);
return nMax;
}
int maxPathSum(TreeNode *root, int& nMax){
if (root == NULL)
return INT_MIN;
int left = maxPathSum(root->left, nMax);
int right = maxPathSum(root->right, nMax);
int max_left = root->val, max_right = max_left, max_lr = max_left;
if (left > 0){
max_left += left;
max_lr += left;
}
if (right > 0){
max_right += right;
max_lr += right;
}
nMax = max(nMax, max_lr);
return max(max_left, max_right);
}
or
class Solution {
public:
int maxPathSum(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int csum;
int maxsum = INT_MIN;
maxPathSumHelper(root, csum, maxsum);
return maxsum;
}
void maxPathSumHelper(TreeNode *node, int &csum, int &maxsum) {
if (!node) {
csum = 0;
return;
}
int lsum = 0, rsum = 0;
maxPathSumHelper(node->left, lsum, maxsum);
maxPathSumHelper(node->right, rsum, maxsum);
csum = max(node->val, max(node->val + lsum, node->val + rsum));
maxsum = max(maxsum, max(csum, node->val + lsum + rsum));
}
};