【leetcode】Binary Tree Maximum Path Sum

Question :  

 

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.

 

Anwser 1 :    

 

/**

  * 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 calLen(TreeNode *root, int &len)

     {

         if (root == NULL)

         {

             len = 0;

             return 0;

         }

         

         if (root->left == NULL && root->right == NULL)

         {

             len = root->val;

             return root->val;

         }

         

         int leftPath, rightPath;

         int leftLen;

         if (root->left)

             leftLen = calLen(root->left, leftPath);

         else

         {

             leftLen = INT_MIN;

             leftPath = 0;

         }

         

         int rightLen;

         if (root->right)

             rightLen = calLen(root->right, rightPath);

         else

         {

             rightLen = INT_MIN;

             rightPath = 0;

         }

         

         len = max(max(leftPath, rightPath) + root->val, root->val);

         int maxLen = max(root->val, max(leftPath + rightPath + root->val, 

             max(leftPath + root->val, rightPath + root->val)));

         

         return max(max(leftLen, rightLen), maxLen);

     }

     

     int maxPathSum(TreeNode *root) {

         // Start typing your C/C++ solution below

         // DO NOT write int main() function

         int len;

         return calLen(root, len);

     }

 };


 

 

 

 

你可能感兴趣的:(LeetCode)