【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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章