题目难度: 困难
原题链接
今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号 算法精选 里回复
剑指offer2
就能看到该系列当前连载的所有文章了, 记得关注哦~
路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。
路径和 是路径中各节点值的总和。
给定一个二叉树的根节点 root ,返回其 最大路径和,即所有路径上节点值之和的最大值。
class Solution:
def maxPathSum(self, root: TreeNode) -> int:
gmx = -float("inf")
def getSinglePathMaxSum(node):
# 返回以node为根的子树的单向路径最大和
nonlocal gmx
if not node:
return -float("inf")
# lmx和rmx分别是左右子树的单向路径最大和
lmx = getSinglePathMaxSum(node.left)
rmx = getSinglePathMaxSum(node.right)
# 求当前节点单向路径最大和, 注意它可能只包含当前节点自身 (例如左右子树路径和都是负数的情况)
# 注意单向路径不包含左子树+根+右子树的情况!!!
mx = max(node.val, lmx + node.val, rmx + node.val)
# 更新全局路径最大和gmx, 这里需要额外考虑左子树+根+右子树的路径
gmx = max(gmx, mx, lmx + rmx + node.val)
return mx
getSinglePathMaxSum(root)
return gmx
大家可以在下面这些地方找到我~
我的 GitHub
我的 Leetcode
我的 CSDN
我的知乎专栏
我的头条号
我的牛客网博客
我的公众号: 算法精选, 欢迎大家扫码关注~