Binary Tree Maximum Path Sum
来源:互联网 发布:js参数给jquery赋值 编辑:程序博客网 时间:2024/05/18 03:36
递归求解,时间复杂度O(n),空间复杂度O(logN),参考Leetcode题解。注意递归返回的时候只能返回单侧路径的和或者根节点的值。
class Solution {public: int max_sum; int maxPathSum(TreeNode *root) { max_sum = INT_MIN; dfs(root); return max_sum; } int dfs(TreeNode *root) { if(!root) return 0; int left = dfs(root->left); int right= dfs(root->right); int sum = root->val; if(left > 0) sum += left; if(right> 0) sum += right; max_sum = std::max(max_sum, sum); if(max(left, right)>0) return max(root->val+left, root->val+right); else return root->val; }};
使用stack进行后序遍历,迭代求解: 参考http://blog.csdn.net/starmsg/article/details/39030379
class Solution {public: int maxPathSum(TreeNode *root) { int max_sum = INT_MIN; if(root == NULL) return 0; unordered_map<TreeNode*, int> map; vector<TreeNode*> stack; TreeNode *cur = root; TreeNode *prev = NULL; int sum = 0; while(!stack.empty() || cur != NULL) { if(cur != NULL) { stack.push_back(cur); cur = cur->left; }else { cur = stack.back(); if(cur->right == NULL || cur->right == prev) { int left_val = (cur->left)?map[cur->left]:0; int right_val = (cur->right)?map[cur->right]:0; int max_val = max(left_val, right_val); map[cur] = max_val>0?(max_val+cur->val):cur->val; sum = cur->val; sum += (left_val>0)?left_val:0; sum += (right_val>0)?right_val:0; max_sum = std::max(max_sum, sum); stack.pop_back(); prev = cur; cur = NULL; } else cur = cur->right; } } return max_sum; }};
0 0
- 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
- Binary Tree Maximum Path Sum
- 数据分析,展现与R语言学习笔记(1)
- VxWorks中的任务及调度(二):VxWorks中的main()
- DOS命令行使用pscp实现远程文件和文件夹传输
- 获取本地与服务器地址
- 全排列实现
- Binary Tree Maximum Path Sum
- wifi softap(hotspot) porting
- 前端开发工程师
- Oracle GoldenGate 11.2 OGG-01168
- sessionFactory有关的问题
- My97DatePicker时间控件使用
- IBM阿蒙克公司已经与纪念斯隆-凯特琳癌症中心合作,用“沃森”来帮助癌症治疗
- hbase实战——(1.1 nosql介绍)
- VxWorks中的任务及调度(三):VxWorks启动流程