240
笔下虽有千言,胸中实无一策

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);
    }
};
posted @ 2020-10-08 08:42  CasperWin  阅读(113)  评论(0编辑  收藏  举报