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.
Code
int maxPathSumDFS(TreeNode *root,int& maxPathSum) { if(!root) return 0; int maxFromLeft = maxPathSumDFS(root->left,maxPathSum); int maxFromRight = maxPathSumDFS(root->right,maxPathSum); int maxVal = max(maxFromLeft,maxFromRight); int maxSum = root->val; if(maxFromLeft > 0) maxSum += maxFromLeft; if(maxFromRight > 0) maxSum += maxFromRight; if(maxPathSum < maxSum) maxPathSum = maxSum; if(maxVal > 0 && root->val > 0) return (maxVal + root->val); if(root->val > 0) return root->val; if((maxVal + root->val) > 0) return (maxVal + root->val); return 0; } int maxPathSum(TreeNode *root) { // IMPORTANT: Please reset any member data you declared, as // the same Solution instance will be reused for each test case. int maxPathSum = INT_MIN; maxPathSumDFS(root,maxPathSum); return maxPathSum; }
No comments:
Post a Comment