手机网站做多宽,做一个免费网站,wordpress 关联,最新国际足球世界排名路径 被定义为一条从树中任意节点出发#xff0c;沿父节点-子节点连接#xff0c;达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点#xff0c;且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root… 路径 被定义为一条从树中任意节点出发沿父节点-子节点连接达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root 返回其 最大路径和 。 示例 1 输入root [1,2,3] 输出6 解释最优路径是 2 - 1 - 3 路径和为 2 1 3 6 示例 2 输入root [-10,9,20,null,null,15,7] 输出42 解释最优路径是 15 - 20 - 7 路径和为 15 20 7 42 提示 树中节点数目范围是 [1, 3 * 1 0 4 10^4 104] -1000 Node.val 1000 class TreeNode:def __init__(self, val0, leftNone, rightNone):self.val valself.left leftself.right rightclass Solution:def __init__(self):self.maxSum float(-inf)def maxPathSum(self, root: TreeNode) - int:def maxGain(node):if not node:return 0# 递归计算左右子节点的最大贡献值# 只有在最大贡献值大于 0 时才会选取对应子节点leftGain max(maxGain(node.left), 0)rightGain max(maxGain(node.right), 0)#当前节点的最大路径和等于左右子节点的贡献值与该节点值的和priceNewpath node.val leftGain rightGain# 更新答案self.maxSum max(self.maxSum, priceNewpath)# 返回节点的最大贡献值return node.val max(leftGain, rightGain)maxGain(root)return self.maxSumif __name__ __main__:s Solution()print(s.maxPathSum(TreeNode(-10, TreeNode(30), TreeNode(20, TreeNode(15), TreeNode(7)))))最大的路径和肯定是一条包含节点左右子树的路径这个节点是这个路径的根节点23,25行但除了这个节点以外路径上的其他节点只能有一棵子树28行