Hard
先进行阅读理解
从一个节点出发,走到另一个节点。返回这个路径的和的最大值。最少节点个数为一个,也就是说单独的一个节点的数值也可以作为结果。
但是要注意的点是,我们走路径时节点是不能重复走的。这点很重要,如下图:
如果选了黄色的子树部分,就不能选择绿色了,即使绿色的值在大也是走不到的。
尝试写一下代码
python3
class Solution:
def maxPathSum(self, root: TreeNode) -> int:
def dfs(node):
if node is None:
return 0
left = dfs(node.left)
right = dfs(node.right)
# 前三种情况、
# >> 后面提到的优化块
cont = max(node.val, node.val + left, node.val + right)
# 第四种情况,记录到结果当中,不会在走递归了
self.r = max(self.r, node.val + max(0,left) + max(0,right))
return cont
# >>
if root is None:
return 0
self.r = float('-inf')
dfs(root)
return self.r
优化: 上面的# >>
代码块,也可以进行优化,可改为一下代码,看上去更简洁,但是要细想一下才能理解
self.r = max(self.r, node.val + max(0,left) + max(0,right))
return node.val + max(0, left, right)