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

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的路径长度再每次递归返回之前进行计算并判定
/**
 * 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;
    }
};

http://www.kler.cn/a/593032.html

相关文章:

  • Blender制作次表面材质
  • AI代理到底怎么玩?
  • IIS 服务器日志和性能监控
  • J2EE实现规范
  • 智慧加油站小程序数据库设计文档
  • K8s集群的环境部署
  • 视频对讲系统中,强插和强拆;视频分发功能
  • 汽车一键启动PKE无钥匙系统
  • 学习TensorFlow前的NumPy核心知识点
  • AI 时代,学习 Java 应如何入手?
  • Python pyqt+flask做一个简单实用的自动排班系统
  • Conda 虚拟环境创建:加不加 Python 版本的深度剖析
  • 十四、OSG学习笔记-事件响应
  • Qt 控件概述 QWdiget 1.1
  • 事件系统简介+Button组件+Toggle简介
  • 一次Linux下 .net 调试经历
  • 【C++】list(下):list类的模拟实现(含反向迭代器实现)
  • 2025赛逸展,消费电子企业角逐科技创新奖
  • 网络编程--服务器双客户端聊天
  • Java设计模式之享元模式