力扣刷题Day 15:二叉树中的最大路径和(124)
1.题目描述
2.思路
自顶向下递归到叶子结点,然后记录每个结点的max(本身的值、自身值与左孩子值之和、自身值与右孩子值之和)、以及自身与左右两个孩子值之和,回溯的过程就是查找最大和的过程。
3.代码(Python3)
class Solution:
def maxPathSum(self, root: Optional[TreeNode]) -> int:
def tree_traversal(node):
nonlocal max_root_sum
if node.left is None:
left_max = 0
else:
left_max = tree_traversal(node.left)
if node.right is None:
right_max = 0
else:
right_max = tree_traversal(node.right)
current_root_max_sum = max(left_max + right_max + node.val, left_max + node.val, right_max + node.val, node.val)
if current_root_max_sum > max_root_sum:
max_root_sum = current_root_max_sum
return max(node.val + left_max, node.val + right_max, node.val)
max_root_sum = float('-inf')
return max(tree_traversal(root), max_root_sum)
4.执行情况
5.感想
首次攻克困难题!