leetcode-Binary Tree Maximum Path Sum
来源:互联网 发布:免费恢复软件下载 编辑:程序博客网 时间:2024/05/16 15:14
Given a binary tree, find the maximum path sum.
The path may start and end at any node in the tree.
For example:
Given the below binary tree,
1 / \ 2 3
Return 6
.
这道题是要求出二叉树任两个节点的路径中节点值累加起来最大的总和,可能两个节点是相同的,就变为一个节点的值,总之是要求出最大的路径和。
要想找出最大路径和,我们可以分别找出经过根节点左(右)孩子出发的单方向的最大路径和(这条路径没有经过左(右)孩子的左右两边),然后再决定根节点是否要加上这两个最大值,如果有负的单方向最大路径和就不会加上,如果为正,则加上根节点的值之后更新全局最大和。在每个孩子节点进行这样的查找操作后更新最大值,并返回该从该孩子节点出发的单向最大路径和,使得父节点可以进行类似的比较更新操作。
感觉这个思路有点绕,还是要花时间找出比较容易理解的方法来。
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: int maxPathSum(TreeNode *root) { // IMPORTANT: Please reset any member data you declared, as // the same Solution instance will be reused for each test case. if (root==NULL) return 0; maxSum = INT_MIN; findMaxPathSum(root); return maxSum; } int findMaxPathSum(TreeNode *root) { //找从root出发的左边或右边的最大和 if (root->val > maxSum) maxSum = root->val; if (root->left==NULL && root->right==NULL) return root->val; int maxLeft = INT_MIN; int maxRight = INT_MIN; if (root->left) maxLeft = findMaxPathSum(root->left); //计算root左边的最大和 if (root->right) maxRight = findMaxPathSum(root->right); //计算root右边的最大和 /* 判断加上左边、右边还是两边的最大和, 并更新最大值maxSum */ if (maxLeft>0) root->val+maxLeft > maxSum ? (maxSum=root->val+maxLeft) : 0; if (maxRight>0) root->val+maxRight > maxSum ? (maxSum=root->val+maxRight) : 0; if (maxLeft>0&&maxRight>0) root->val+maxLeft+maxRight > maxSum ? (maxSum=root->val+maxLeft+maxRight) : 0; /* 返回从root出发的单边的最大和 */ int pathSum = maxLeft > maxRight ? maxLeft : maxRight; return pathSum>0 ? root->val + pathSum : root->val; }private: int maxSum;};
- *****(leetcode) Binary Tree Maximum Path Sum (tree)
- LeetCode Binary Tree Maximum Path Sum
- [Leetcode] Binary Tree Maximum Path Sum
- [leetcode] Binary Tree Maximum Path Sum
- LeetCode Binary Tree Maximum Path Sum
- [LeetCode] Binary Tree Maximum Path Sum
- leetcode Binary Tree Maximum Path Sum
- 【leetcode】Binary Tree Maximum Path Sum
- LeetCode - Binary Tree Maximum Path Sum
- [LeetCode]Binary Tree Maximum Path Sum
- [Leetcode]Binary Tree Maximum Path Sum
- Leetcode: Binary Tree Maximum Path Sum
- LeetCode-Binary Tree Maximum Path Sum
- [leetcode] Binary Tree Maximum Path Sum
- LeetCode - Binary Tree Maximum Path Sum
- LeetCode 124: Binary Tree Maximum Path Sum
- 【Leetcode】Binary Tree Maximum Path Sum
- LeetCode | Binary Tree Maximum Path Sum
- 安装了Phonon,却不能播放视频和音频
- mysql和sql2008兼容group by中带函数的情况 max
- 强化学习算法介绍(Reinforcement Learning and Control)
- 生成iOS平台的Framework格式的库
- hibernate中一对一或一对多外键的映射
- leetcode-Binary Tree Maximum Path Sum
- ibatis Could not find SQL statement to include with refid 'xxx' 问题
- 常用cmd命令
- c++中冒号(:)和双冒号(::)的用法
- cocos2dx zip文件加压
- 学习设计模式笔记(一)部分总结
- JAVA深复制(深克隆)与浅复制(浅克隆)
- maven eclipse 报错
- 基于VRM(访问者关系管理)的RTB(实时竞价)