小小程序媛  
得之坦然,失之淡然,顺其自然,争其必然

题目

Given a binary tree, find the maximum path sum.

For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The path does not need to go through the root.

For example:
Given the below binary tree,

       1
      / \
     2   3

 

Return 6.

分析

给定一颗二叉树,求其最大路径和。对于二叉树,算法大多可以选择递归解决,此题也不例外。
如果只是一个节点,那么当然就是这个节点的值了.

如果这个作为root,那么最长路应该就是..

F(left) + F(right) + val...当然如果left,或者right<0就不用加了的= =

从下往上递归遍历...

如果不这个不是root,那么就不能把left和right加起来了...因为只是一条路...


AC代码

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 
11 class Solution {
12 public:
13     int maxVal = INT_MIN;
14     int maxPathSum(TreeNode* root) {
15         if (root == NULL)
16             return 0;
17 
18         maxSum(root);
19         return maxVal;
20     }
21 
22     /*递归函数*/
23     int maxSum(TreeNode *root)
24     {
25         if (root == NULL)
26             return 0;
27 
28         /*求以root为根的当前子树的最大路径和*/
29         int curVal = root->val;
30         int lmaxSum = maxSum(root->left), rmaxSum = maxSum(root->right);
31         if (lmaxSum > 0)
32             curVal += lmaxSum;
33         if (rmaxSum > 0)
34             curVal += rmaxSum;
35 
36         if (curVal > maxVal)
37             maxVal = curVal;
38 
39         /*返回以当前root为根的子树的最大路径和*/
40         return max(root->val, max(root->val + lmaxSum, root->val + rmaxSum));
41     }
42 };

 



 

posted on 2015-12-27 16:20  Coding菌  阅读(189)  评论(0编辑  收藏  举报