难度:困难
题目描述:
思路总结:
- 边界判断
- 递归找出左右子树最大的gain,小于0就不选。
- 取以当前节点为根节点的最大值和root为根节点最大值为最大路径和
- 返回每个节点作为根节点的最大路径作为子树的最大路径。
题解一:(递归)
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def maxPathSum(self, root: TreeNode) -> int:
def max_gain(node):
nonlocal max_sum
if not node:return 0
left_max = max(max_gain(node.left), 0)
right_max = max(max_gain(node.right),0)
new_price = node.val + left_max + right_max
max_sum = max(max_sum, new_price)
return node.val + max(left_max, right_max)
max_sum = float('-inf')
max_gain(root)
return max_sum
题解一结果: