【LeetCode124】二叉树中的最大路径和
【摘要】
1.题目
2.思路
明确题目的路径定义后,知道有4种路径: (1)单一结点 (2)某个结点及其左子树组成的路径 (3)某个结点及其右子树组成的路径 (4)某个各节点及其左右子树组成的路径(该路径...
1.题目
2.思路
明确题目的路径定义后,知道有4种路径:
(1)单一结点
(2)某个结点及其左子树组成的路径
(3)某个结点及其右子树组成的路径
(4)某个各节点及其左右子树组成的路径(该路径无法作为子路径返回给上一级结点——否则形成的就不是路径了)
递归后序遍历,遍历到某个结点时,先获得该结点左右子树中的最大路径,然后将左右子树的最大路径与该结点连接形成以上四种类型的路径,而其实第1、2、3种路径都是(4)的特例。
更新全局的最大路径和,然后将max((4)型路径中最大的路径和,res)返回给上一级结点——这样做是为了形成一条路径,即要选左右子树的最大路径。
注意:如果左(右)子树路径为负,则可以不加该路径了,也即赋值为0。
3.代码
class Solution {
public:
int res=INT_MIN;
int maxPathSum(TreeNode* root) {
dfs(root);
return res;
}
int dfs(TreeNode* root){
if(root==NULL){
return 0;
}
int left=dfs(root->left);
if(left<0)
left=0;//如果左子树路径为负的,则可以不加该路径了
int right=dfs(root->right);
if(right<0)
right=0;
res=max(left+right+root->val,res);
return max(left,right)+root->val;
}
};
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
文章来源: andyguo.blog.csdn.net,作者:山顶夕景,版权归原作者所有,如需转载,请联系作者。
原文链接:andyguo.blog.csdn.net/article/details/115438540
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)