博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 124. Binary Tree Maximum Path Sum
阅读量:5306 次
发布时间:2019-06-14

本文共 1965 字,大约阅读时间需要 6 分钟。

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 class Solution {11 public:12     int maxPathSum(TreeNode* root) {13         int partialSum=0;14         int maxSum=INT_MIN;15         calculateSum(root, partialSum, maxSum);16         return maxSum;17     }18 19     //partialSum means the maximal sum which contains only current node and only one of its subtree (either left or right)20     void calculateSum(TreeNode * root, int & partialSum, int & maxSum) {21         if(root == NULL) return;22         int leftPartialSum=0;23         if(root->left != NULL)24             calculateSum(root->left, leftPartialSum, maxSum);25 26         int rightPartialSum=0;27         if(root->right != NULL)28             calculateSum(root->right, rightPartialSum, maxSum);29 30         partialSum=max(root->val, max(root->val+leftPartialSum, root->val+rightPartialSum));31         maxSum=max(partialSum, max(maxSum, leftPartialSum+rightPartialSum+root->val));32     }33 };

partialSum仅有如下几种情况:root, root+leftSubtree, root+rightSubtree. 即一条合法的路径。

maxSum有如下几种情况:1、即partialSum 2、左儿子+root+右儿子 3、之前的maxSum值

关于其中第三种情况的解释:maxSum存储了目前为止最大和路径的值,

                                     比如  -1

                                            /    \

                                          -2      3

                                     maxSum先是-2(处理-2节点时),然后是3(处理3时),最后是3(处理-1时)。而处理-1时partialSum为-1,-3,2中最大的,即2.

 

待重写以加深印象,留坑。

注意:                                         

int maxSum = INT_MIN;或int maxSum = 0x80000000

                 

 

另一种写法:

1 class Solution { 2 public: 3 int res; 4 int maxPathSum(TreeNode* root) { 5     res = 0x80000000; 6     dfs(root); 7     return res; 8 } 9 int dfs(TreeNode* tree){10     if(!tree) return 0;11     int left = dfs(tree->left), right = dfs(tree->right), tmp;12     tmp = max(tree->val, tree->val+left);13     tmp = max(tmp, tree->val+right);14     res = max(tmp, res);15     res = max(res, tree->val+left+right);16     return tmp;17 18 }19 };

 

顺便两份一模一样的代码居然跑的时间不一样,留坑。

转载于:https://www.cnblogs.com/co0oder/p/5236167.html

你可能感兴趣的文章
L2-007 家庭房产 (25 分) (并查集)
查看>>
二分查找法注意事项
查看>>
随机采样方法(接受-拒绝采样,MCMC蒙特卡洛采样、Gibbs采样)
查看>>
(转载)Windows下手动完全卸载Oracle
查看>>
MFC消除视图闪烁
查看>>
100个容器引擎项目,点亮你的容器集群技能树
查看>>
团队任务三
查看>>
如何去掉滚动条
查看>>
【MySQL学习笔记】数据库设计的三大范式
查看>>
算法的时间复杂度
查看>>
获得Coclor的色值(小技巧)
查看>>
Django介绍(3)
查看>>
英语面试的相关资料
查看>>
设置默认套打模板
查看>>
iperf3使用
查看>>
谷歌三大核心技术(三)Google BigTable中文版
查看>>
python2.7 第一天
查看>>
python实现贪吃蛇
查看>>
sql 选出值不为空的
查看>>
Appium环境搭建(Mac版)
查看>>