# author: weicai ye
# email: yeweicai@zju.edu.cn 
# datetime: 2020/7/15 下午2:19

# 给定一个非空二叉树，返回其最大路径和。
#
# 本题中，路径被定义为一条从树中任意节点出发，达到任意节点的序列。该路径至少包含一个节点，且不一定经过根节点。
#
# 示例 1:
#
# 输入: [1,2,3]
#
#        1
#       / \
#      2   3
#
# 输出: 6
# 示例 2:
#
# 输入: [-10,9,20,null,null,15,7]
#
#    -10
#    / \
#   9  20
#     /  \
#    15   7
#
# 输出: 42
#
# 来源：力扣（LeetCode）
# 链接：https://leetcode-cn.com/problems/binary-tree-maximum-path-sum
# 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

from typing import List
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Solution:
    def __init__(self):
        self.ans = float("-inf")
    def maxPathSum(self, root: TreeNode) -> int:
        def maxGain(node):
            if not node:
                return 0
            left = max(0, maxGain(node.left))
            right = max(0, maxGain(node.right))
            self.ans = max(self.ans, left+right+node.val)
            return node.val + max(left, right)
        maxGain(root)
        return self.ans

if __name__ == "__main__":
	pass