题目描述
给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
解题思路
二叉树中的最大路径和,可以将这个问题进行最小化,如示例1所示,二叉树仅包含父节点、左节点和右节点三个节点,最大路径和问题转化为了求root.val, root.val+root.left.val, root.val+root.right.val, root.val+root.left.val+root.right.val
四者最大值的问题;进一步,对于示例2,进行该最小问题的延拓,对于每个非根节点可采用上述思路完成,对于上一层的父节点,则需进行适当的变化,由于题目要求为最大路径和,那么,对于子节点而言,左子节点和右子节点只能有一个纳入最后的路径。
Python代码
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
max_v = -10e9
def maxPathSum(self, root: TreeNode) -> int:
def getMax(root):
if not root:
return 0
left = getMax(root.left)
right = getMax(root.right)
val1 = root.val
val2 = root.val + left
val3 = root.val + right
val4 = root.val + left + right
# 记录最大值
self.max_v = max([self.max_v, val1, val2, val3, val4])
# 对于当前节点 路径可以包括左子节点和右子节点
# 但是对于父节点,只能使用该节点的左节点或右节点
return max([val1, val2, val3])
# call function
getMax(root)
return self.max_v