电竞比分网-中国电竞赛事及体育赛事平台

分享

?LeetCode刷題實戰(zhàn)124:二叉樹中的最大路徑和

 程序IT圈 2021-01-16
算法的重要性,我就不多說了吧,想去大廠,就必須要經(jīng)過基礎(chǔ)知識和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個公眾號后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

今天和大家聊的問題叫做 二叉樹中的最大路徑和,我們先來看題面:
https:///problems/binary-tree-maximum-path-sum/

Given a non-empty binary tree, find the maximum path sum.

For this problem, a path is defined as any node sequence from some starting node to any node in the tree along the parent-child connections. The path must contain at least one node and does not need to go through the root.

題意



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

本題中,路徑被定義為一條從樹中任意節(jié)點出發(fā),沿父節(jié)點-子節(jié)點連接,達到任意節(jié)點的序列。該路徑至少包含一個節(jié)點,且不一定經(jīng)過根節(jié)點。

樣例

解題


思路總結(jié):

  • 邊界判斷

  • 遞歸找出左右子樹最大的gain,小于0就不選。

  • 取以當(dāng)前節(jié)點為根節(jié)點的最大值和root為根節(jié)點最大值為最大路徑和

  • 返回每個節(jié)點作為根節(jié)點的最大路徑作為子樹的最大路徑。

class Solution:
    def maxPathSum(self, root: TreeNode) -> int:
        
        def max_gain(node):
            nonlocal max_sum
            if not node:return 0
            left_max = max(max_gain(node.left), 0)
            right_max = max(max_gain(node.right),0)
            new_price = node.val + left_max + right_max
            max_sum = max(max_sum, new_price)
            return node.val + max(left_max, right_max)
        max_sum = float('-inf')
        max_gain(root)
        return max_sum



好了,今天的文章就到這里,如果覺得有所收獲,請順手點個在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動力。

上期推文:

LeetCode1-120題匯總,希望對你有點幫助!
LeetCode刷題實戰(zhàn)121:買賣股票的最佳時機
LeetCode刷題實戰(zhàn)122:買賣股票的最佳時機 II
LeetCode刷題實戰(zhàn)123:買賣股票的最佳時機 III

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多