【错题集-编程题】二叉树中的最大路径和(树形dp)

简介: 【错题集-编程题】二叉树中的最大路径和(树形dp)

牛客对应题目链接:二叉树中的最大路径和_牛客题霸_牛客网

力扣对应题目链接:124. 二叉树中的最大路径和 - 力扣(LeetCode)


一、分析题目

树形 dp

  • 左子树收集:以左子树为起点的最大单链和。
  • 右子树收集:以右子树为起点的最大单链和。
  • 根节点要做的事情:整合左右子树的信息,得到经过根节点的最大路径和
  • 向上返回:以根节点为起点的最⼤单链和。

二、代码

//值得学习的代码
class Solution
{
public:
    int ret = -1010;
 
    int maxPathSum(TreeNode* root) 
    {
        dfs(root);
        return ret;
    }
 
    int dfs(TreeNode* root)
    {
        if(root == nullptr) return 0;
 
        int l = max(0, dfs(root->left));// 左⼦树的最⼤单链和
        int r = max(0, dfs(root->right)); // 右⼦树的最⼤单链和
        // 经过root的最⼤路径和
        ret = max(ret, root->val + l + r);
 
        return root->val + max(l, r);
    }
};
 
//力扣AC代码
/**
 * 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) {}
 * };
 */
class Solution {
private:
    int maxSum=INT_MIN;
public:
    int maxGain(TreeNode* node)
    {
        if(node==nullptr) return 0;
        int leftGain=max(0, maxGain(node->left));
        int rightGain=max(0, maxGain(node->right));
        int sum=leftGain+rightGain+node->val;
        maxSum=max(maxSum, sum);
        return node->val+max(leftGain, rightGain);
    }
    int maxPathSum(TreeNode* root) {
        maxGain(root);
        return maxSum;
    }
};


相关文章
|
5月前
|
存储 缓存 算法
动归和递归算法讲解
动归和递归算法讲解
|
6月前
leetcode热题100.二叉树中的最大路径和
leetcode热题100.二叉树中的最大路径和
35 0
|
6月前
|
NoSQL 容器 消息中间件
递归题目树型实战
递归题目树型实战
二叉树相关问题细谈递归(下)
二叉树相关问题细谈递归(下)
63 0
|
存储
二叉树相关问题细谈递归(上)
二叉树相关问题细谈递归
70 0
|
算法
代码随想录算法训练营第十七天 | LeetCode 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
代码随想录算法训练营第十七天 | LeetCode 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
42 0
轻轻松松学递归
轻轻松松学递归
|
前端开发 算法 API
[LeetCode算法]有了二叉树层序遍历,妈妈再也不用担心我不会做二叉树层级题了
博主最近在刷`leetcode`,做到二叉树套题的时候发现很多题的解题思路都是基于二叉树的层序遍历来完成的,因此写下这篇文章,记录一下二叉树层序遍历这件"神器"在实战的运用。
146 1
|
算法 C++ Python
每日算法系列【LeetCode 124】二叉树中的最大路径和
每日算法系列【LeetCode 124】二叉树中的最大路径和
142 0
|
机器学习/深度学习
LeetCode每日一题(13)——建立四叉树(递归)
建立四叉树 1.题目 2.示例 3.思路 4.代码
161 0
LeetCode每日一题(13)——建立四叉树(递归)