zoukankan      html  css  js  c++  java
  • 30 Day Challenge Day 20 | Leetcode 124. Binary Tree Maximum Path Sum

    题解

    Hard

    Tree, DFS

    时隔两年,再次把我难住。作为深度优先搜索或者递归的一道练习题,还是很有价值的。

    基本上这道题,递归的变量,有两个,一个是结果,另一个是从当前节点往一个方向延伸的最大和,这个容易想到。但有几处细节容易忽略。

    比如在求一侧的最大和的时候,要把加和为负值的支段剪掉,那么就有了 max(0, maxDown()).

    class Solution {
    public:
        int maxPathSum(TreeNode* root) {
            int res = INT_MIN;
            maxDown(root, res);
            return res;
        }
        
        int maxDown(TreeNode* node, int& res) {
            if(!node) {
                return 0;
            }
            
            int left = max(0, maxDown(node->left, res)); // prune negative branch 
            int right = max(0, maxDown(node->right, res));
            
            res = max(res, left + right + node->val);
            
            return node->val + max(left, right);
        }
    };
    
  • 相关阅读:
    AVFrame与Mat
    conda警告
    MS COCO数据集格式
    ubuntu卡在工作区切换界面
    C++编程便捷口
    Anaconda相关问题
    处理memory output
    ajax 上传form表单
    元类 metaclass
    小菜一碟
  • 原文地址:https://www.cnblogs.com/casperwin/p/13780260.html
Copyright © 2011-2022 走看看