給定乙個二叉樹,請計算節點值之和最大的路徑的節點值之和是多少。
這個路徑的開始節點和結束節點可以是二叉樹中的任意節點,不是根結點到葉節點,可以使葉節點到葉節點,也可以使中間節點。
解題思路:
首先考慮清楚兩件事情:
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 ...