1. 程式人生 > 實用技巧 >LeetCode 124.二叉樹中的最大路徑和

LeetCode 124.二叉樹中的最大路徑和

給定一個非空二叉樹,返回其最大路徑和。
本題中,路徑被定義為一條從樹中任意節點出發,沿父節點-子節點連線,達到任意節點的序列。
該路徑至少包含一個節點,且不一定經過根節點。

示例 1:
輸入:[1,2,3]

   1
  / \
 2   3

輸出:6

示例 2:
輸入:[-10,9,20,null,null,15,7]

-10
/
9 20
/
15 7

輸出:42

class Solution:
    def __init__(self):
        self.maxSum = -float('inf')
    def maxPathSum(self, root: TreeNode) -> int:
        def maxGain(root):
            if root is None:
                return 0
            leftGain = max(0, maxGain(root.left))
            rightGain = max(0, maxGain(root.right))
            self.maxSum = max(self.maxSum, root.val + leftGain + rightGain)
            return root.val + max(leftGain, rightGain)

        maxGain(root)
        return self.maxSum

        """
        時間複雜度:O(n)
        空間複雜度:O(n)
        遞迴的入口和出口、返回值,全域性狀態的更新邏輯
        """