zoukankan      html  css  js  c++  java
  • leecode第一百二十四题(二叉树中的最大路径和)

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    private:
        int res = INT_MIN;
    
        int getMax(TreeNode* r) {
            if(r == NULL)
                return 0;
            int left = max(0, getMax(r->left)); // 如果子树路径和为负则应当置0表示最大路径不包含子树
            int right = max(0, getMax(r->right));
            res = max(res, r->val + left + right); // 判断在该节点包含左右子树的路径和是否大于当前最大路径和
            return max(left, right) + r->val;
        }
    public:
        int maxPathSum(TreeNode* root) {
            /**
            对于任意一个节点, 如果最大和路径包含该节点, 那么只可能是两种情况:
            1. 其左右子树中所构成的和路径值较大的那个加上该节点的值后向父节点回溯构成最大路径
            2. 左右子树都在最大路径中, 加上该节点的值构成了最终的最大路径
            **/
            getMax(root);
            return res;
        }
        
    
    };

    分析:

    做不出来啊,这是网友的思路,我想到了递归,但是没想到全局变量,导致我一直在想判断到底是左右节点都保留,还是只留最大的,没想到啊。唉,我还是不够看的。

  • 相关阅读:
    安装配置ZooKeeper及基本用法
    关于SqlServer数据库数据备份失败的问题
    input 框自动检测输入是否为数字
    nginx配置负载均衡
    nginx日志文件的配置
    nginx的proxy模块详解以及参数
    nginx配置反向代理
    正向代理和反向代理
    Linux建立虚拟ip的方法
    nginx基于ip的虚拟主机
  • 原文地址:https://www.cnblogs.com/CJT-blog/p/10643876.html
Copyright © 2011-2022 走看看