给定一个非空二叉树,通过父子之间的连接,求出二叉树的最大路径和。
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.max = -1e10
self.getPath(root)
return self.max
def getPath(self,root):
if not root:
return 0
left_val = max(self.getPath(root.left),0)
right_val = max(self.getPath(root.right),0)
# 是连接该节点向右节点走数字更大 还是暂时(不包括本节点)一路向上走的值更大?
# 用max标记
self.max = max(root.val+left_val+right_val,self.max)
# 返回一路向上走的最大值
return max(left_val,right_val)+root.val