(二叉樹)7 二叉樹中的最大路徑和

2021-10-23 23:18:34 字數 1680 閱讀 1423

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

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

示例 1:

輸入: [1,2,3]

1

/ \

2 3

輸出: 6

示例 2:

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

-10

/ \

9 20

/ \15 7

輸出: 42

1. 從 dfs(-10) 開始, 

1.1 dfs(9):

1.1.1 左孩子為空;貢獻為 0

1.1.2 右孩子為空,貢獻為 0

1.1.3 更新 res = max (-∞,(9 + 0 + 0)) = 9

1.1.4 返回 dfs(9) = 9 + max(左孩子貢獻,右孩子貢獻)) = 9

1.2 dfs(20)

1.2.1 dfs(15):

1.2.1.1 左孩子為空;貢獻為0

1.2.1.2 右孩子為空,貢獻為0

1.2.1.3 更新 res = max(9, 15 + 0 + 0) = 15

1.2.1.4 返回 dfs(15) = 15 + 0 = 15

1.2.2 dfs(7):

1.2.2.1 左孩子為空;貢獻為 0

1.2.2.2 右孩子為空,貢獻為 0

1.2.2.3 更新 res = max(15, 7 + 0 + 0) = 15

1.2.2.4 返回 dfs(7) = 7 + 0 = 7

1.2.3 更新 res = max (15, 20 + dfs(15) + dfs(7) ) = 42

1.2.4 返回dfs(20) = 20 + max(15, 7) = 35

1.3 更新 res = max(42, -10 + dfs(9) + dfs(20) ) = max(42, 34) = 42

1.4 返回 dfs(-10) = -10 + max(9, 35) = 25 (當然這一步就沒啥用了,已經有最終res)

所以最大路徑和 res = 42

關鍵就是區分:

當前節點最大路徑和計算:以當前節點為起點的所有路徑和

class

solution

dfs(root)

;return res;

}public

intdfs

(treenode node)

int leftmax = math.

max(

dfs(node.left),0

);int rightmax = math.

max(

dfs(node.right),0

);int nodemax = node.val + math.

max(leftmax, rightmax)

;// 計算當前節點的最大路徑和,並進行更新

res = math.

max(res, node.val + leftmax + rightmax)

;return nodemax;

}}

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

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

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

二叉樹的最小 最大 路徑 二叉樹

給定乙個二叉樹,找出其最小深度。最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。說明 葉子節點是指沒有子節點的節點。示例 1 輸入 root 3,9,20,null,null,15,7 輸出 2 示例 2 輸入 root 2,null,3,null,4,null,5,null,6 輸出 5 ...

二叉樹最大路徑和

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