题目
分析
求当前节点T包含的最大路径,那么就是 以左节点L开始的最大路径和Lmax,和以右节点开始的最大路径和Rmax,这三个部分构成的最大路径和有(T,T+Lmax,T+Rmax,T+Rmax+Lmax) 这四种情况和当前最大路径和MAX做对比。
当求以左节点为开始的最大路径时,左节点必须包含在路径内,并且左节点的左右子树必须选择其中一个或者都不选择,也就是说(L,L+L.Lmax,L+L.Rmax)这三种路径返回最大的给T。
python代码
class Solution(object):
def __init__(self):
self.max = float("-inf")
def maxPathSum(self, root):
"""
:type root: TreeNode
:rtype: int
"""
self.dfs(root)
return self.max
def dfs(self,root):
if not root:
return 0
res = root.val
left = self.dfs(root.left)
right = self.dfs(root.right)
self.max = max(self.max,res+left,res+right,res+right+left,res)
return max(res,res+left,res+right)