当前位置: 首页 > news >正文

力扣HOT100之二叉树:124. 二叉树中的最大路径和


这道题是困难题,靠自己想还是挺难想的,还是去看的灵神的题解,感觉还是要多复习一下这道题。这道题的思路和之前做的543. 二叉树的直径很像,可以参考之前的这篇博客。这里我们还是用递归来做,定义一个lambda函数来实现递归遍历,还是同样的思路,我们遍历所有节点,计算当以该节点为拐点的时候所能取到的最大路径和(必须要取,哪怕最大路径和为负数也必须取一个最大的负数),我们分别对左孩子节点和右孩子节点调用递归函数,计算各自的最大直链和,然后相加,再加上根节点存储的值,然后与当前的最大路径和作比较,较大结果保存在一个外部变量result中,但是该函数不返回result,而是返回包括当前节点在内的最大直链和与0的较大值,因为这道题的最大路径和并不一定要以叶子节点为起点或者终点,所以包含当前节点的直链和出现负数时,我们可以直接丢弃,重新从0开始计算。

/*** 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 {
public:int maxPathSum(TreeNode* root) {int result = INT_MIN;auto dfs = [&] (this auto&& dfs, TreeNode* root) -> int{if(!root) return 0;//左int left_max = dfs(root -> left);//右int right_max = dfs(root -> right);//中result = max(result, left_max + right_max + root -> val);return max(max(left_max, right_max) + root -> val, 0);};dfs(root);return result;}
};

相关文章:

  • 鸿蒙Flutter实战:21-混合开发详解-1-概述
  • 力扣-无重复字符的最长子串
  • 手机入网时长查询接口:精准风控与用户运营的智能利器
  • 深入理解 PlaNet(Deep Planning Network):基于python从零实现
  • ffmpeg 转换视频格式
  • 【MySQL成神之路】MySQL插入、删除、更新操作汇总
  • 掌握正则表达式:从基础语法到工程实践
  • 使用gradio创建LLM模型聊天Demo
  • 如何在 Mac M4 芯片电脑上卸载高版本的 Node.js
  • 【论文阅读】——AN EXPRESSIVE REPRESENTATION OF GENERAL 3D SHAPES
  • 网页 CSS美化(详解)
  • 机器学习圣经PRML作者Bishop20年后新作中文版出版!
  • python 绘制3D平面图
  • 【前端】每日一道面试题4:什么是CSS容器查询(Container Queries)?与媒体查询有何区别?
  • CSS:vertical-align用法以及布局小案例(较难)
  • Spark SQL、Hive SQL运行流程解析及对比
  • Linux环境基础开发工具->vim
  • Paimon和Hive相集成
  • Java的Filter与Spring的Interceptor的比较
  • vim以及vi编辑器常用快捷键指令
  • 电商网站建设方向/seo优化外链平台
  • wordpress多本小说站出售/武汉百度推广代运营
  • 做网站有什么好书籍/网络舆情分析研判报告
  • 个人网站也要备案吗/百度推广登陆首页
  • 长沙专业做网站的公司/浏览器下载
  • 政府单位建设网站的申请报告/推广方案策略怎么写