124. 二叉树中的最大路径和

https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/

解法一:递归遍历

对于任意一个节点node, 如果最大和路径包含该节点, 那么只可能是两种情况: 1. node的左右子树中所路径和较大的,加上node的值后向node父节点回溯构成最大路径(若向父节点回溯,则左右分支只能选一个,因为不能回路) 2. 左右子树都在最大路径中, 加上node的值构成了最终的最大路径。

naive的思路,(有bug:

class Solution:
    def maxPathSum(self, root: TreeNode) -> int:
        self.maxSum = -sys.maxsize
        self.getMax(root)
        return self.maxSum
    
    def getMax(self, root):
        if not root:
            return 0
        left = self.getMax(root.left)
        right = self.getMax(root.right)
        self.maxSum = max(self.maxSum, left+right+root.val)
        return max(left, right) + root.val

这个解法对case[2, -1]失效,返回1而正确答案为2。因为若node的左右子树路径和小于0,对node的贡献就为负,应该不取。

正确解法:

最后更新于