124. 二叉树中的最大路径和
题目描述
解题思路
1、后序遍历:先取得左右子树的最大路径和,如何路径和大于0,则有效,否则无效
2、嵌套函数返回值的不能是:node.val + leftSum + rightSum
,应该是:node.val + max(leftSum, rightSum)
。因为max_path_sum()的定义是:以当前节点为路径的最大路径和,左右子树只能选一条路径。
代码实现
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def maxPathSum(self, root: TreeNode) -> int:
# 后序遍历:先取得左右子树的最大路径和,如何路径和大于0,则有效,否则无效
self.max_sum = float("-inf")
def max_path_sum(node):
if not node:
return 0
leftSum = max(max_path_sum(node.left), 0)
rightSum = max(max_path_sum(node.right), 0)
nodeSum = node.val + leftSum + rightSum
self.max_sum = max(self.max_sum, nodeSum)
# 这个是向上返回一路最大路径和,因此不能是:node.val + leftSum + rightSum
return node.val + max(leftSum, rightSum)
max_path_sum(root)
return self.max_sum
参考文献
1、官方题解