您的位置:首页 > 其它

LeetCode Binary Tree Maximum Path Sum

2016-05-10 19:47 295 查看

LeetCode解题之Binary Tree Maximum Path Sum

原题

求一棵二叉树中最大的路径和。该路径可以是二叉树中某一节点到树中任意一个节点的所经过的路径,不允许重复经过一个节点,不必经过根节点。

注意点:



例子:

输入:

1
/ \
2   3


输出: 6

解题思路

采用递归的方法,我们知道一条路径必定有一个节点最接近根节点,而该条路径的和就是这个节点的值加上它左右路径的和。我们现在要求最大路径和,那么就要分别得到左右两条路径的最大和。而左路径的最大和为左节点的值加上它左右路径中较大的路径和,右路径最大和为右节点的值加上它左右路径中较大的路径和。注意如果某条子路径的和为负,应该将该条子路径直接砍掉。

AC源码

# 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
"""
self.maxSum = float('-inf')
self._maxPathSum(root)
return self.maxSum

def _maxPathSum(self, root):
if root is None:
return 0
left = self._maxPathSum(root.left)
right = self._maxPathSum(root.right)
left = left if left > 0 else 0
right = right if right > 0 else 0
self.maxSum = max(self.maxSum, root.val + left + right)
return max(left, right) + root.val


欢迎查看我的Github (https://github.com/gavinfish/LeetCode-Python) 来获得相关源码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: