劍指offer 二叉樹最大路徑和

2021-10-09 08:51:52 字數 1382 閱讀 5266

給定乙個二叉樹,請計算節點值之和最大的路徑的節點值之和是多少。

這個路徑的開始節點和結束節點可以是二叉樹中的任意節點,不是根結點到葉節點,可以使葉節點到葉節點,也可以使中間節點。

解題思路:

首先考慮清楚兩件事情:

1、節點的值可能是非負的,因此開始的結點不一定是根結點,結束的結點也不一定是葉子結點。

2、題目沒有說是要按照自頂向下順序遍歷,因此可能最大路徑和是root.left>root>root.right。這就需要找到左子樹最大值,右子樹最大值在加上根的值。所以對每乙個結點都要比較:左子樹max+根,右子樹max+根,左子樹max+右子樹max+根(第20行)。下面的getmax函式就是對每乙個結點進行操作,返回以當前結點為根結點時的最大值,當前根結點要考慮加上根結點的值(第22行),才能做後續的子樹,不然樹就斷了。

class

treenode

:def

__init__

(self, x)

: self.val = x

self.left =

none

self.right =

none

class

solution

:def

maxpathsum

(self, root)

:# write code here

self.res =

float

('-inf'

)#全域性變數

self.getmax(root)

return self.res

defgetmax

(self, root)

:#找到當前root結點下最大節點和,肯定要帶上root結點,為後續遞迴

if root ==

none

:return

0 leftmax =

max(

0, self.getmax(root.left)

) rightmax =

max(

0, self.getmax(root.right)

) self.res =

max(self.res,

max(leftmax, rightmax)

+ root.val, leftmax + rightmax + root.val)

#當前root節點下最大的情況,可以不帶root,更新結果

return

max(leftmax, rightmax)

+ root.val #找到當前root結點下最大節點和,要帶上root節點,為後續遞迴時作為子樹

二叉樹最大路徑和 python 二叉樹最大路徑和

1.題目描述 輸入乙個二叉樹層次遍歷的結果,輸出這個二叉樹最大路徑和。路徑不一定從根節點開始和葉子節點結束。只要是連續的路徑就可以。如輸入 10,9,20,null,null,15,7 109 20 15 7 輸出 42 2.首先將乙個陣列還原成乙個二叉樹。然後根絕二叉樹的根節點返回最大路徑和。cl...

二叉樹最大路徑和

每個節點不可以重複經過求,求二叉樹的最大路徑和。二叉樹如圖 本文採用深度優先演算法解題。假設每個節點都有兩個屬性,s stop c continue s屬性為,該節點及其以下節點的不停止走法最大值。c屬性為在還有路可走的情況下的最大值。舉例說明 node4節點,有兩條路可走 路線一和路線二 路線一意...

二叉樹中最大路徑和

給定乙個非空二叉樹,返回其最大路徑和。本題中,路徑被定義為一條從樹中任意節點出發,達到任意節點的序列。該路徑至少包含乙個節點,且不一定經過根節點。輸出 6 解析 2 1 3為最大路徑和 輸出 42 解析 15 20 7為最大路徑和 func maxpathsum root treenode int ...