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;
        }
        
    
    };

    分析:

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

  • 相关阅读:
    老王python博客
    python中文分词
    python 字典(dict)get方法应用
    python yield和generators(生成器)
    python ASCII返回对应的值(chr)
    python 字符串特点
    python 包的定义,结构,导入过程
    fabric的安装和配置
    python 正则表达式re findall
    python unittest单元测试方法和用例
  • 原文地址:https://www.cnblogs.com/CJT-blog/p/10643876.html
Copyright © 2011-2022 走看看