[leetCode]Binary Tree Maximum Path Sum

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.

 

思想主要是使用递归,获得节点左枝和右枝的最大值,然后和自己的值相加,如果大于最大值则替换。

同时要注意的是:如果该节点有父节点,那么只能返回self.val+left.val或者self.val+right.val. 

详细参考:http://www.cnblogs.com/shawnhue/archive/2013/06/08/leetcode_124.html

C++代码

/**
 * 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 maxSum;
    bool hasParent;
    Solution(){ maxSum = -999;}
    int maxPathSum(TreeNode *root) {
        maxNodeSum(root,false);
        return maxSum;
    }
private:
    int maxNodeSum(TreeNode *root, bool hsaParent){
        int leftSum,rightSum,curmax;
        leftSum = rightSum = curmax = 0;
        TreeNode *cur = root;
        if(cur == NULL) return 0;
        if(cur->left != NULL) leftSum = maxNodeSum(cur->left,true);
        if(cur->right != NULL) rightSum = maxNodeSum(cur->right,true);
        if(leftSum < 0)    leftSum = 0;
        if(rightSum < 0) rightSum = 0;
        curmax = cur->val+leftSum+rightSum;
        if(maxSum < curmax) maxSum = curmax;
        if(hasParent) curmax = cur->val + ((leftSum > rightSum)?leftSum : rightSum);        
        return curmax;
    }
};

 

posted @ 2014-03-06 11:02  青轰的后花园  阅读(149)  评论(0编辑  收藏  举报