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

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

cpp 复制代码
/**
 * 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;
    }
};
相关推荐
拓恒技术7 小时前
无人机巡检AI算法的工程化落地:从需求到交付的5个核心环节
人工智能·算法·无人机
晨曦中的暮雨7 小时前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶
java·开发语言·算法
怕浪猫7 小时前
Claude Code vs Codex:Computer Use 实现原理深度拆解
算法·面试·github
文丑颜不良啊9 小时前
LeetCode876~900题目解析
java·leetcode
罗西的思考9 小时前
AI 时代的 “房谋杜断”:如何培养能力、品味与判断力
人工智能·算法·机器学习
淡海水9 小时前
07-02-源码-.NET Core GC分配路径
算法·unity·c#·.netcore·gc·1024程序员节
下一站春风里11 小时前
位运算完整学习笔记:按位与(&)+ 异或(^)
开发语言·c++·算法
DRobot11 小时前
【机械制图与CAD实战(二十五)】螺纹的表示方法
算法·机械制图
用户老李12 小时前
卡尔曼滤波自学教程 10:无迹卡尔曼滤波(UKF)
算法
深圳市益普科技有限公司13 小时前
半导体良率管理YMS:良率与设备参数的相关性,先拉哪几组数据
人工智能·python·算法