您的位置:首页 > 产品设计 > UI/UE

leetcode_question_124 Binary Tree Maximum Path Sum

2013-09-21 11:42 465 查看
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, int &depthsum)
{
if(root == NULL)return 0;
if(root->left == NULL && root->right == NULL)
{depthsum = root->val; return root->val;}

int maxsum = 0xC0000000;
int left = 0, lefthalf = 0;
if(root->left)
left = maxpathsum(root->left, lefthalf);
else
{left = 0xC0000000; lefthalf = 0xC0000000;}

int right = 0, righthalf = 0;
if(root->right)
right = maxpathsum(root->right, righthalf);
else
{right = 0xC0000000; righthalf = 0xC0000000;}

maxsum = lefthalf + root->val + righthalf;
maxsum = left > maxsum ? left : maxsum;
maxsum = right > maxsum ? right : maxsum;
lefthalf = lefthalf > righthalf ? lefthalf : righthalf;
depthsum = lefthalf + root->val > root->val ? lefthalf+root->val : root->val;
maxsum = maxsum > depthsum ? maxsum : depthsum;
maxsum = maxsum > root->val ? maxsum : root->val;
return maxsum;
}
int maxPathSum(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(root == NULL)return 0;
int maxsum = 0;
int depthsum = 0;
maxsum = maxpathsum(root, depthsum);
maxsum = depthsum > maxsum ? depthsum : maxsum;
return maxsum;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息