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
.
class Solution {
public:
int maxPathSum(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int tmp=-99999999;
if(!root)
return 0;
maxPathSum2(root,tmp);
return tmp;
}
int maxPathSum2(TreeNode *root , int &path){
int lefttmp=-99999999;
int righttmp=-99999999;
if(!root)
return -99999999;
if(root->left)
lefttmp=maxPathSum2(root->left,path);
if(root->right)
righttmp=maxPathSum2(root->right,path);
path=max(max(max(max(max(lefttmp,righttmp),root->val),lefttmp+root->val),righttmp+root->val),righttmp+lefttmp+root->val);
return max(max(max(righttmp+root->val,-99999999),lefttmp+root->val),root->val);
}
};