【LeetCode】124. Binary Tree Maximum Path Sum 解題報告(Python)

給定一個非空二叉樹,返回其最大路徑和。

本題中,路徑被定義爲一條從樹中任意節點出發,達到任意節點的序列。該路徑至少包含一個節點,且不一定經過根節點。

示例 1:

輸入: [1,2,3]

   1
  / \
 2   3

輸出: 6
示例 2:

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

   -10
   / \
  9   20
    / \
   15  7   

輸出: 42

解題思路:

遞歸,涉及到樹的題目一般採用遞歸的方式。

  1. 首先判斷左子樹的和,如果是負數就返回0
  2. 然後判斷右子樹的和,如果是負數就返回0
  3. 左右子樹與根節點的值求和作爲局部最大值
  4. 與歷史局部最大值比較得到所有種的最大值
  5. 返回給上一層時只能選擇一個子樹,返回根節點值加左右子樹的最大值

提交代碼:(遞歸,Runtime: 92 ms, faster than 76.35 % )

class Solution:
    def __init__(self):
        self.maxSum = float("-inf")

    def maxPathSum(self, root: TreeNode) -> int:
        def maxdepth(root):
            if not root:
                return 0
            leftsum = max(maxdepth(root.left), 0)
            rightsum = max(maxdepth(root.right), 0)
            sum = leftsum + rightsum + root.val
            self.maxSum = max(sum, self.maxSum)
            return max(leftsum, rightsum) + root.val
        maxdepth(root)
        return self.maxSum
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章