力扣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 分钟前
量化金融入门:从数据规则到随机游走与凯利公式
人工智能·算法·金融·量化金融
圣保罗的大教堂12 分钟前
leetcode 3702. 按位异或非零的最长子序列 中等
leetcode
薛定e的猫咪44 分钟前
(arXiv 2026)GLiBRL :可学习基函数的深度贝叶斯元强化学习 ----待补充
人工智能·深度学习·学习·算法·机器学习
hetao17338371 小时前
2026-08-21~23 hetao1733837 的刷题记录
c++·算法
青 春 记 忆2 小时前
LeetCode 206. 反转链表|Python 解法详解
python·leetcode·链表
CQU_JIAKE2 小时前
8.23【A】
算法
sprlightning2 小时前
LHDC V5 算法深度解析
算法·fft·lhdcv5·imdct·mdct·rice·fac
csdn_aspnet3 小时前
C# 第k个最小元素(K’th Smallest Element)
算法·c#·排序算法
BioRunYiXue3 小时前
RACE技术全攻略:从全长克隆到靶基因验证
java·javascript·网络·人工智能·科技·算法·eclipse