Given a binary tree, find the maximum path sum.
The path may start and end at any node in the tree.
For example:
Given the below binary tree,
1
/ \
2 3
The path may start and end at any node in the tree.
For example:
Given the below binary tree,
1
/ \
2 3
Return 6.
这个问题可以用递归的方法做分别找出左子树,右子树的最大值,再加起来。
This problem can be solved by using traversal. we need to find left and right max then, sum them up.
# Definition for a binary tree node
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# @param root, a tree node
# @return an integer
def findmax(self,root):
sum=root.val
lmax=0
rmax=0
if root.left:
lmax=self.findmax(root.left)
if lmax>0:
sum+=lmax
if root.right:
rmax=self.findmax(root.right)
if rmax>0:
sum+=rmax
if self.max<sum:
self.max=sum
return max(root.val,max(root.val+lmax,root.val+rmax))
def maxPathSum(self, root):
self.max=-1000000
self.findmax(root)
return self.max