給定一棵非空二叉樹,返回其最大路徑和,路徑爲從任意節點出發,到達任意節點的序列,至少包含一個節點。
本道題中路徑可能彎折,因此首先要簡化,考慮從某個節點往下搜索,路徑和是多少,在考慮跨越該節點,
最大路徑和是多少。
class Solution:
def __init__(self):
self.max_val=-sys.maxsize
def maxPathSum(self, root: TreeNode) -> int:
self.helper1(root)
return self.max_val
def helper1(self,node):
if node is None:
return -sys.maxsize
path1=self.helper1(node.left)
path2=self.helper1(node.right)
self.max_val=max(self.max_val,node.val,node.val+path1,node.val+path2,node.val+path2+path1)
return max(node.val,node.val+path2,node.val+path1)