【错题集-编程题】二叉树中的最大路径和(树形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;
    }
};


相关文章
|
机器学习/深度学习 存储 算法
【数据结构与算法篇】 二叉树的性质(补充)
【数据结构与算法篇】 二叉树的性质(补充)
87 0
|
6月前
|
算法 Java 定位技术
【数据结构与算法】递归、回溯、八皇后 一文打尽!
【数据结构与算法】递归、回溯、八皇后 一文打尽!
|
12月前
|
存储
二叉树相关问题细谈递归(上)
二叉树相关问题细谈递归
69 0
|
12月前
二叉树相关问题细谈递归(下)
二叉树相关问题细谈递归(下)
61 0
|
12月前
|
算法
代码随想录算法训练营第十七天 | LeetCode 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
代码随想录算法训练营第十七天 | LeetCode 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
42 0
|
12月前
|
算法
代码随想录算法训练营第十九天 | LeetCode 654. 最大二叉树、617. 合并二叉树、700. 二叉搜索树中的搜索、98. 验证二叉搜索树
代码随想录算法训练营第十九天 | LeetCode 654. 最大二叉树、617. 合并二叉树、700. 二叉搜索树中的搜索、98. 验证二叉搜索树
57 0
|
前端开发 算法 API
[LeetCode算法]有了二叉树层序遍历,妈妈再也不用担心我不会做二叉树层级题了
博主最近在刷`leetcode`,做到二叉树套题的时候发现很多题的解题思路都是基于二叉树的层序遍历来完成的,因此写下这篇文章,记录一下二叉树层序遍历这件"神器"在实战的运用。
145 1
leetcode105/1382-构建二叉树与二叉平衡树(人生苦短,速速递归)
leetcode105/1382-构建二叉树与二叉平衡树(人生苦短,速速递归)
leetcode105/1382-构建二叉树与二叉平衡树(人生苦短,速速递归)
|
存储 机器学习/深度学习 Java
《Java数据结构》这些树和二叉树的性质你还记得吗?
《Java数据结构》这些树和二叉树的性质你还记得吗?
116 0
|
机器学习/深度学习
LeetCode每日一题(13)——建立四叉树(递归)
建立四叉树 1.题目 2.示例 3.思路 4.代码
154 0
LeetCode每日一题(13)——建立四叉树(递归)