力扣124 二叉樹中的最大路徑和

2021-10-21 06:51:14 字數 1491 閱讀 9424

路徑: 被定義為一條從樹中任意節點出發,沿父節點-子節點連線,達到任意節點的序列。同乙個節點在一條路徑序列中至多出現一次 。該路徑 至少包含乙個 節點,且不一定經過根節點。

路徑和: 是路徑中各節點值的總和。

題目要求:給你乙個二叉樹的根節點 root ,返回其最大路徑和 。

示例 1:

輸入:root = [1,2,3]

輸出:6

解釋:最優路徑是 2 -> 1 -> 3 ,路徑和為 2 + 1 + 3 = 6

示例 2:

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

輸出:42

解釋:最優路徑是 15 -> 20 -> 7 ,路徑和為 15 + 20 + 7 = 42

題解:

class

solution

public

intonesidemax

(treenode root)

}

分析:

ans計算當前節點的最大路徑和

onesidemax則可以選擇出兩條邊(兩個子樹)中有更大路徑和的那乙個,即從葉子選擇1還是選擇2走到目的節點。

思路:採用後序遍歷的想法

先計算出左子樹中已經選擇出的最大一條邊的路徑和(onesidemax),再接著是右子樹,最後加上根的值(root.val)就是最大路徑和。

比如示例二,按照我們的解題思路是:

自底向下,因為是後序遍歷。

1.從9開始,因為它是葉子節點,容易算出其ans為9;return 0+9,代表從這裡往上面走(-10)最大路徑是9;

2.(-10)左子樹遍歷完,接著是右子樹。

從15開始,和第一步類似,可知當前節點的路徑和ans變成了15,所以最大值更新為15

3.從7開始,當前節點路徑和為7比15小,不更新。

4.此時對於20,15,7這個子樹來說,從左邊只有一條 路15,右邊也只有一條路7,所以這個樹的最大路徑和為15+7+20=42

5.到這裡呼叫還沒有結束,注意理解每一層次的呼叫,不要搞亂了順序。

對於-10為根的這棵樹,前面已經知道左邊的路只有一條,現在要考慮右邊走哪一條,此時就可以體會到onesidemax的作用, 顯而易見走20->15這一條,則完整路徑是9->-10->20->15,其路徑和卻為34比42小,終得最大值是42.

對於整個過程,就像是在拼圖一樣,從最下面的葉子節點開始,一層一層往上拼,左右子樹選擇大的路徑的邊,比較一下子樹的最大路徑,慢慢更新,直到最終變成乙個大樹。

124 二叉樹中的最大路徑和

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

124 二叉樹中的最大路徑和

給定乙個非空二叉樹,返回其最大路徑和。本題中,路徑被定義為一條從樹中任意節點出發,達到任意節點的序列。該路徑至少包含乙個節點,且不一定經過根節點。示例 1 輸入 1,2,3 1 2 3 輸出 6示例 2 輸入 10,9,20,null,null,15,7 10 9 20 15 7 輸出 42思路 對...

124 二叉樹中的最大路徑和

題目 給定乙個非空二叉樹,返回其最大路徑和。本題中,路徑被定義為一條從樹中任意節點出發,達到任意節點的序列。該路徑至少包含乙個節點,且不一定經過根節點。示例 1 輸入 1,2,3 1 2 3輸出 6 示例 2 輸入 10,9,20,null,null,15,7 10 9 20 15 7 沒看題解獨自...