【leetcode 124】 二叉树中的最大路径和

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def maxPathSum(self, root: TreeNode) -> int:
        self.ans = float("-inf")
        def func(root):
            if not root: return 0
            left = func(root.left)
            right = func(root.right)
            # 所包含路径的最大值(有可能为0),所以我们就每轮都比较并记录,self.maxsum与左子树与右子树的最大值加上当前节点的值val
            self.ans = max(self.ans,left+right+root.val)    
            # 本题必须要借用返回值来在每一层递归中比较路径的大小,因为如果不将这个路径的大小随着函数返回的话,外部变量self.maxsum将会无法每一轮比较和更新。
            return max(0,max(left,right)+root.val)
        func(root)
        return self.ans
posted @ 2020-11-24 18:30  WangSJiNa  阅读(52)  评论(0)    收藏  举报