原题:
给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
示例 1:
输入: [1,2,3]
1
/ \
2 3
输出: 6
示例 2:
输入: [-10,9,20,null,null,15,7]
-10
/
9 20
/
15 7
输出: 42
在真实的面试中遇到过这道题?
分析:
运用递归,将每个路径及子路经的和计算出来,并选出其中的最大值
代码:
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
def maxPathSum(node):
global max_sum
if not node:
return 0
# 获取路径中左右的分支的值
leftvalue = max(maxPathSum(node.left), 0)
rightvalue = max(maxPathSum(node.right), 0)
# 某一子回路的值
price_newpath = node.val + leftvalue + rightvalue
# 更新最大路径值
max_sum = max(max_sum, price_newpath)
return node.val + max(leftvalue, rightvalue)
tree = TreeNode(-10)
tree.left = TreeNode(9)
tree.right = TreeNode(20)
tree.right.left=TreeNode(15)
tree.right.right=TreeNode(7)
max_sum = float('-inf')
maxPathSum(tree)
print(max_sum)
效果: