Problem:
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
.
Analysis:
The solution comes from the website: http://fisherlei.blogspot.com/2013/01/leetcode-binary-tree-maximum-path-sum.html
Solutioins:
C++:
int maxPathSum(TreeNode* root)
{
int maxAcrossRoot = INT_MIN;
int maxEndByRoot = GetMax(root, maxAcrossRoot);
return std::max(maxAcrossRoot, maxEndByRoot);
}
int GetMax(TreeNode *node, int& maxAcrossRoot)
{
if(node == NULL) return 0;
int left = GetMax(node->left, maxAcrossRoot);
int right = GetMax(node->right, maxAcrossRoot);
int cMax = node->val;
if(left>0)
cMax += left;
if(right>0)
cMax += right;
maxAcrossRoot = std::max(maxAcrossRoot, cMax);
return std::max(node->val, std::max(node->val + left, node->val + right));
}
Java
:
Python: