码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode: Binary Tree Maximum Path Sum

时间:2014-12-08 13:46:49      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   sp   for   on   div   

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.

分析:这道题的难点在于路径可以是任意路径而不限于从根开始。解决这个问题我们可以从分解问题和分类讨论入手。对于一个二叉树,其maximum path或者包含root,或者不包含root,这点是解决问题的关键。如果maximum path不包含root,那么这个问题就分解成求左右两个子树的maximum path sum,然后取大的。如果maximum path包含root,我们在计算maximum path sum时需要知道包含左子树中包含root->left的maximum path sum(这里用left_sum表示)和右子树中包含root->right的maximum path sum(用right_sum表示)。我们用maxsum表示题目要求的maximum path sum,如果left_sum和right_sum均小于等于0,那么maxsum = max(maxsum, root->val);否则maxsum取当前maxsum、left_sum+root->val, right_sum+root->val, left_sum+root->val+right_sum的最大值。至此,这道题就可以解决了。代码如下:

class Solution {
public:
    int maxPathSum(TreeNode *root) {
        int max_sum = INT_MIN;
        max_path(root, max_sum);
        return max_sum;
    }
    
    int max_path(TreeNode * root, int & max_sum){
        if(root == NULL) return 0;
        
        int l = max_path(root->left, max_sum);
        int r = max_path(root->right, max_sum);
        int sum = root->val;
        
        if(l > 0) sum += l;
        if(r > 0) sum += r;
        
        max_sum = max(max_sum,sum);
        
        return max(l,r)>0?max(l,r) + root->val:root->val;
    }
};

 

Leetcode: Binary Tree Maximum Path Sum

标签:style   blog   io   ar   color   sp   for   on   div   

原文地址:http://www.cnblogs.com/Kai-Xing/p/4150827.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!