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

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

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

Difficulty: 困難

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

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

示例 1:

輸入:[1,2,3]

       1
      / \
     2   3

輸出:6

示例2:

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

  -10
 / \
 9 20
  / \
 15  7

輸出:42

Solution

Language: 全部題目

題目讀起來有點拗口,簡單的理解是在整棵樹中找到連線兩個節點的一條路徑,並且路徑上的節點和是所有可能路徑中最大的。

需要考慮節點的值全部為負數的情況,此時不能直接返回0。可以考慮每個節點的左右兩顆子樹,求子樹的最大路徑和,然後返回root.val + max(l, r)

參考:花花醬 LeetCode 124. Binary Tree Maximum Path Sum - 刷題找工作 EP90 - YouTube

# Definition for a binary tree node.
# class TreeNode:
#   def __init__(self, val=0, left=None, right=None):
#     self.val = val
#     self.left = left
#     self.right = right
class Solution:
  def maxPathSum(self, root: TreeNode) -> int:
    self.res = -float("inf")
    self.helper(root)
    return self.res
    
  def helper(self, root):
    if not root: return 0
    l = max(0, self.helper(root.left))
    r = max(0, self.helper(root.right))
    self.res = max(self.res, root.val + l + r)
    return root.val + max(l, r)