Binary Tree Maximum Path Sum [leetcode] dp
2015-07-04 11:48
337 查看
a(i):在节点i由于单边路径的最大结束
b(i):在节点i路径和
a(i) = max{ i->val,
i->val + max{a(i->left), a(i->right) }};
b(i) = max{ i->val, i->val + max{a(i->left), a(i->right) } ,
i->val + a(i->left) + a(i->right)};
因为a(i), b(i)只和a(i->left)和a(i->right) 有关。因此能够将空间压缩为O(1)
代码例如以下:
b(i):在节点i路径和
a(i) = max{ i->val,
i->val + max{a(i->left), a(i->right) }};
b(i) = max{ i->val, i->val + max{a(i->left), a(i->right) } ,
i->val + a(i->left) + a(i->right)};
因为a(i), b(i)只和a(i->left)和a(i->right) 有关。因此能够将空间压缩为O(1)
代码例如以下:
int maxPathSum(TreeNode *root) { int res = INT_MIN; getSum(root, res); return res; } int getSum(TreeNode * root, int & res) { if (root == NULL) return 0; int l = getSum(root->left, res); int r = getSum(root->right, res); int a, b; a = max(root->val, root->val + max(l, r));//one side b = max(a, root->val + l + r); //both side res = max(res, max(a, b)); return a; }
相关文章推荐
- java基础之基本语法
- Android IOS WebRTC 音视频开发总结(三一)-- 自定义传输实现一对多
- 成员函数的重载&&隐藏&&覆盖
- Android ListView使用详解
- (转)UILabel的详细使用
- quartz调度
- win10 DX12到底带来了哪些变化?哪些显卡和平台支持DX12?
- 关于SoftReference,WeakReference的简单了解
- Oracle 存储过程创建和执行入门实例
- C++ Primer学习笔记(7)——指针形参和引用形参的比较
- Windows显示驱动中读取EDID
- eclipse中maven插件上传项目jar包到私服
- C#中获取、生成随机数的三种方法
- 背景音乐
- mongodb 基本操作
- 详细解说STL string
- 最优秀的创意来自留白
- 可记住用户名和密码的登录界面
- 用wireshark解析应用层存储包
- JS 之表单特殊控制