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


相关文章
|
网络协议 Ubuntu Linux
Linux 动态/静态配置ip网卡信息
Linux 动态/静态配置ip网卡信息
1690 0
|
JavaScript 前端开发 开发者
JavaScript中setInterval与setTimeout的异同及使用
【4月更文挑战第22天】JavaScript的`setInterval`和`setTimeout`都用于定时执行任务,但有区别。`setInterval`会按指定间隔反复执行,直到被`clearInterval`停止,可能导致函数堆积;`setTimeout`只执行一次,延迟后执行,适合递归调用来模拟间隔。选择使用时要考虑任务的重复性、执行依赖及可能的性能影响。
|
IDE Java 开发工具
什么是IDE?新手用哪个IDE比较好?
什么是IDE?新手用哪个IDE比较好?
4082 0
|
负载均衡 Cloud Native Linux
云原生|docker|基于docker部署高可用keepalived集群
云原生|docker|基于docker部署高可用keepalived集群
1315 0
|
7月前
|
存储 监控 Java
Java 线程模型底层解密:从内核原理到生产级架构选型,全链路实战指南
本文深入剖析Java线程模型底层原理:从OS线程模型(ULT/KLT/混合)、HotSpot 1:1内核线程实现,到线程生命周期、wait/park中断机制、ThreadLocal内存泄漏规避;详解线程池参数选型(CPU/IO密集型)、生产级最佳实践,并对比虚拟线程优势与适用场景,打通原理到落地全链路。
1079 1
Java 线程模型底层解密:从内核原理到生产级架构选型,全链路实战指南
|
9月前
|
机器学习/深度学习 传感器 算法
Python | Stacking回归和SHAP可解释性分析回归预测及可视化算法
本教程基于Python实现Stacking回归与SHAP可解释性分析,涵盖地球科学、医学、工程等多领域回归预测应用。结合CatBoost、LightGBM、XGBoost等模型,采用贝叶斯、随机与网格搜索优化参数,并通过SHAP值可视化特征贡献,提升模型性能与可解释性,适用于科研与实际项目。
1021 2
|
9月前
|
存储 人工智能 监控
什么是可信数据空间?为什么可信数据空间是数据共享的关键?
可信数据空间是解决数据共享中安全与合规难题的关键。它通过数据主权保障、技术互信和协同计算,实现跨组织安全数据协作,广泛应用于金融、医疗、企业内部门户等领域,是打破数据孤岛、构建数字信任的基石。
1327 12
|
9月前
|
存储 运维 监控
大模型应用:构建智能大模型运维体系:模型健康度监测系统实践.8
本系统是面向大模型的智能健康度监测平台,采用前后端分离架构(Flask+HTML/CSS/JS),实现四层立体监控(系统资源、模型运行、服务性能、业务质量)。支持实时指标采集、动态基准线告警、多维性能评分及可视化看板,具备请求全链路追踪与预测性运维能力。
452 10
|
存储 关系型数据库 MySQL
介绍MySQL的InnoDB引擎特性
总结而言 , Inno DB 引搞 是 MySQL 中 高 性 能 , 高 可靠 的 存 储选项 , 宽泛 应用于要求强 复杂交易处理场景 。
502 15
|
安全 NoSQL API
拼多多:通过微信支付API实现社交裂变付款的技术解析
基于微信JSAPI构建社交裂变支付系统,用户发起拼单后生成预订单与分享链接,好友代付后通过回调更新订单并触发奖励。集成微信支付、异步处理、签名验签与Redis关系绑定,提升支付成功率与裂变系数,实现高效安全的闭环支付。
1189 0

热门文章

最新文章