LeetCode 124. 二叉樹中的最大路徑和
阿新 • • 發佈:2020-11-29
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)