【leetcode】124.Binary Tree Maximum Path Sum
来源:互联网 发布:网络摄像头安装方案 编辑:程序博客网 时间:2024/06/04 19:51
「思路」
将问题转化为两个部分,第一部分为maxsum函数,实现以不同节点作为根节点的最大结果,并不断更新最大结果。第二部分为downsum函数,由于maxsum函数确定了根节点,所以downsum负责以固定点为根节点向下传递时路径最大的和。
但是这种办法导致超时。
class Solution {public: int ans; int maxPathSum(TreeNode* root) { if(!root)return 0; ans=root->val; maxsum(root,ans); return ans; } void maxsum(TreeNode* root,int a) { ans=max(ans,a); if(!root) { return; } int m,n; if(downsum(root->left)<0) {m=0;} else m=downsum(root->left); if(downsum(root->right)<0){n=0;} else n=downsum(root->right); a=root->val+m+n; maxsum(root->left,a); maxsum(root->right,a); } int downsum(TreeNode* root)//问题转化为向下单向传递时,和最大的路径 { if(!root) { return 0; } int m,n; if(downsum(root->left)<0) {m=0;} else m=downsum(root->left); if(downsum(root->right)<0){n=0;} else n=downsum(root->right); return root->val+max(m,n); }};
「改进一」
查了一下网上的代码,先计算出左右节点的最大值,如果左右节点大于0,则加上左右节点,否则不加。最后返回根节点,根节点加左子树,根节点加右子树最大的数。
class Solution {public: int ans; int maxPathSum(TreeNode* root) { if(!root)return 0; ans=root->val; maxsum(root); return ans; } int maxsum(TreeNode* root) { if(!root) return 0; int node=root->val; int lmax=maxsum(root->left),rmax=maxsum(root->right); if(lmax>0)node+=lmax; if(rmax>0)node+=rmax; ans=max(ans,node); return max(root->val, max(root->val + lmax, root->val + rmax)); }
「改进二」
仅仅将判断语句改为max函数,但是速度有了显著提升,从29ms进步到19ms。
class Solution {public: int ans; int maxPathSum(TreeNode* root) { if(!root)return 0; ans=root->val; maxsum(root); return ans; } int maxsum(TreeNode* root) { if(!root) return 0; int node=root->val; int lmax=maxsum(root->left),rmax=maxsum(root->right); node+=max(0,lmax); node+=max(0,rmax); ans=max(ans,node); return max(root->val, max(root->val + lmax, root->val + rmax)); }
阅读全文
0 0
- LeetCode 124. Binary Tree Maximum Path Sum
- [LeetCode]*124.Binary Tree Maximum Path Sum
- [Leetcode] 124. Binary Tree Maximum Path Sum
- [leetcode] 124. Binary Tree Maximum Path Sum
- [leetcode] 124. Binary Tree Maximum Path Sum
- Leetcode 124. Binary Tree Maximum Path Sum
- Leetcode 124. Binary Tree Maximum Path Sum
- LeetCode 124. Binary Tree Maximum Path Sum
- leetcode 124. Binary Tree Maximum Path Sum
- LeetCode 124. Binary Tree Maximum Path Sum
- Leetcode 124. Binary Tree Maximum Path Sum
- [LeetCode] 124. Binary Tree Maximum Path Sum
- leetcode 124.Binary Tree Maximum Path Sum
- leetcode-124. Binary Tree Maximum Path Sum
- [LeetCode]124. Binary Tree Maximum Path Sum
- Leetcode 124. Binary Tree Maximum Path Sum
- LeetCode 124. Binary Tree Maximum Path Sum
- LEETCODE 124. Binary Tree Maximum Path Sum
- 图的基本概念
- http的七层协议
- 无向图的实现
- Pycharm使用-添加文件模版
- BigDecimal的加减乘除及比较大小
- 【leetcode】124.Binary Tree Maximum Path Sum
- 2017年8月30日 机房模拟赛题解
- # VSCode 编辑器
- java中Map<String,Double>map按照value降序排列 Map<String,Double>map=new TreeMap<String,Double>(); map.put("
- Springmvc中提交from之后不跳转不进控制器
- 从矛盾中解决市场
- 有向图的实现
- 每日英语阅读(四十四)
- 怎么下载小程序二维码-微信小程序开发-视频教程4