一、题目
给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
示例1
输入: [1,2,3]
1
/ \
2 3
输出: 6
示例2
输入: [-10,9,20,null,null,15,7]
-10
/ \
9 20
/ \
15 7
输出: 42
二、代码
python
class Solution:
res = float('-inf')
def maxPathSum(self, root: TreeNode) -> int:
self.getMax(root)
return self.res
def getMax(self,root):
if not root:
return 0
# 如果子树路径和为负则应当置0表示最大路径不包含子树
left = max(0, self.getMax(root.left))
right = max(0, self.getMax(root.right))
# 以当前节点为根节点,判断在该节点包含左右子树的路径和是否大于当前最大路径和
self.res = max(self.res, root.val + left + right)
# 当前节点作为父节点的一个子节点和父节点连接的话则需取【单端的最大值】返回
return max(left, right) + root.val