LeetCode[124] 二叉树中的最大路径和

递归

  1. 两种情况:
    • node + left + right:不考虑父节点,或者本身就是树的根节点
    • parent + max{node + left, node + right}:给父节点返回其 左子树 和 右子树 的最长路径和
  2. 每次递归只能返回 node + left或者node + right 来满足 parent + max{node + left, node + right} 这种情况
    • 如果返回node + left + right时,parent + 返回路径(node + left + right)时,将不满足一条路径的定义,路径将会分叉
    • node + left + right的路径长度再每次递归返回之前进行计算并判定
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 {
private:
    int maxSum = INT_MIN; // 记录路径最大值
public:
    int max_sum(TreeNode* root)
    {
        if(root == nullptr) // 如果为空,递归开始返回
            return 0;
        // 左右子树的最长路径和,均不包括node+left+right情况
        int left = max(max_sum(root->left), 0); // 左子树的最长路径和
        int right = max(max_sum(root->right), 0); // 右子树的最长路径和

        maxSum = max(maxSum, root->val+right+left); // 考虑node+left+right情况,同时树的根节点也需要考虑该情况,更新最长路径和

        return root->val + max(left, right); // 返回当前树的最长路径
    }
    int maxPathSum(TreeNode* root) {
        max_sum(root);
        return maxSum;
    }
};
相关推荐
pzx_00114 分钟前
【LeetCode】14. 最长公共前缀
算法·leetcode·职场和发展
self_myth15 分钟前
算法与数据结构实战技巧:从复杂度分析到数学优化
算法
songx_991 小时前
leetcode10(跳跃游戏 II)
数据结构·算法·leetcode
先做个垃圾出来………2 小时前
差分数组(Difference Array)
java·数据结构·算法
hansang_IR2 小时前
【题解】洛谷 P4286 [SHOI2008] 安全的航线 [递归分治]
c++·数学·算法·dfs·题解·向量·点积
乐迪信息2 小时前
乐迪信息:AI摄像机在智慧煤矿人员安全与行为识别中的技术应用
大数据·人工智能·算法·安全·视觉检测
多恩Stone3 小时前
【3DV 进阶-2】Hunyuan3D2.1 训练代码详细理解下-数据读取流程
人工智能·python·算法·3d·aigc
惯导马工4 小时前
【论文导读】IDOL: Inertial Deep Orientation-Estimation and Localization
深度学习·算法
老姜洛克4 小时前
自然语言处理(NLP)之n-gram从原理到实战
算法·nlp
1白天的黑夜14 小时前
哈希表-49.字母异位词分组-力扣(LeetCode)
c++·leetcode·哈希表