【LeetCode 124.】二叉树中的最大路径和 Binary Tree Maximun Path Sum Python3解法

题目描述

给定一个非空二叉树,返回其最大路径和。

本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
在这里插入图片描述
在这里插入图片描述

解题思路

二叉树中的最大路径和,可以将这个问题进行最小化,如示例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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章