Leetcode Binary Tree Maximum Path Sum

OpenSoucre發表於2014-07-01

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.

對於每個結點,我們需要比較三個值。

  • 左結點為結尾的路徑和+當前結點值
  • 右結點為結尾的路徑和+當前結點值
  • 當前結點值

取這個三個值作為以當前節點為結尾的最大路徑和返回。

同時獲取以當前結點為根的子樹的最大路徑和,其子樹最大路徑來源於

  • 以當前結點為結尾的最大路徑和(也就是上面結點所述的值)
  • 左節點為結尾的路徑和+當前結點值+右結點為結尾的路徑和
  • 左子樹的最大路徑和
  • 右子樹的最大路徑和

取其4個值中得最大值作為子樹的最大路徑和。

class Solution {
public:
    int maxSum = INT_MIN;
    int getMaxSum(TreeNode* root){
        if(root == NULL) return 0;
        int leftSum = getMaxSum(root->left), rightSum = getMaxSum(root->right);
        int curSum =  max(root->val, max(root->val+leftSum, root->val+rightSum));
        maxSum = max(maxSum,max(curSum,root->val+leftSum+rightSum));
        return curSum;
    }

    int maxPathSum(TreeNode *root){
        getMaxSum(root);
        return maxSum;
    }
};

 

相關文章