解题思路:使用递归的方式,root和左右子树最大路径和,以及左右子树分别的路径,取其中最大值,但return时只能是root加左或右子树的路径。
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def maxPathSum(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if root is None:
return 0
if root.left is None and root.right is None:
return root.val
ans = [root.val]
self.findmax(root,ans)
return ans[0]
def findmax(self,root,ans):
val = root.val
left = 0
right = 0
l=[]
if root.left:
left = self.findmax(root.left,ans)
l.append(left)
if root.right:
right = self.findmax(root.right,ans)
l.append(right)
if len(l) > 0:
maxi = l[0]
for i in l:
if i > maxi:
maxi = i
ans[0] = max(ans[0],maxi)
l = [root.val,root.val+left,root.val+right]
maxi = l[0]
for i in l:
if i > maxi:
maxi = i
ans[0] = max(ans[0],maxi)
ans[0] = max(ans[0],root.val+left+right)
#只能return包含root及左子树或右子树之一的路径,否则不构成路径
return maxi