Binary Tree Maximum Path Sum--一次没A过的题
来源:互联网 发布:类似p2p的软件 编辑:程序博客网 时间:2024/05/01 12:13
题目大意
求一棵树上任意两节点之间路径和的最大值
解题思路
很容易想到树形DP对吧,我觉得应该属于简单的树形DP,唯一要注意的是题目说是路径,那就只会有唯一的一个起点和终点(可能相同),显然对于树上DP到的当前节点,可以分为以下两种种情况考虑:
1、当前节点为某一路径上的点,即当前节点连接其子节点和父节点,那么就应该用当前节点的val加上其左右子树较大的那一个值,然后返回更新后的状态,向上回归。
2、当前节点作为连接两棵子树的节点,那么它和其左右子树构成一条路径(与父节点无关),(代码中的maxx)记录其路径和并找到最大,显然这种情况不应当回归到父节点而是直接成为可行解。
这样的思路就十分清晰了,还有一些细节需要注意,比如考虑到当前节点可能为负数,故要其左(右)子树也可能构成可行解、每一个独立的节点可以构成可行解。
总结
还是细节问题,考虑到上述全部提到的细节,1Y应该是没有问题的,至于你有没有1Y,我反正是没有的T-T。。。
代码
class Solution {public: int maxx = INT_MIN; int getMaxPathSum(TreeNode *cur) { if (cur->left==NULL && cur->right==NULL) return cur->val; int left_val = -1*(1<<30), right_val = -1*(1<<30);//这里不能取最小,会溢出,因为有加运算 if (cur->left != NULL) left_val = getMaxPathSum(cur->left); if (cur->right != NULL) right_val = getMaxPathSum(cur->right); maxx = max(left_val+right_val+cur->val, max(cur->val,maxx)); maxx = max(left_val, maxx); maxx = max(right_val, maxx); return max(cur->val,cur->val+max(left_val,right_val)); } int maxPathSum(TreeNode *root) { maxx = INT_MIN; int ans = getMaxPathSum(root); return max(ans, maxx); }};
0 0
- Binary Tree Maximum Path Sum--一次没A过的题
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- Binary Tree Maximum Path Sum
- 布丰投针问题
- 蜕变之路
- Vijos P1443 银河英雄传说个人通过/递交:11/25(44%)
- hadoop学习-wordcount程序c++重写执行
- 链表的正逆序打印 java语言实现
- Binary Tree Maximum Path Sum--一次没A过的题
- pat 1067. Sort with Swap(0,*) (25)
- Linux下ps aux解释
- Java高新技术怎么样
- 在GitHub上挖了两个坑
- 中秋阳澄情,“谢”礼送不停
- postgresql pdo执行query返回false
- VC中基于 Windows 的精确定时
- C++ precision() 函数