LeetCode 第124題 二叉樹的最大路徑和

2021-09-25 03:18:01 字數 1290 閱讀 6325

本題可以對比左神演算法中的:二叉樹中的最遠距離,只不過最遠距離中沒有考慮權重的問題,本題需要考慮每個節點的權重問題,還是有所區別的。

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

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

示例 1:

輸入: [1,2,3]

1

/  \

2   3

輸出: 6

示例 2:

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

-10/   \

920

/   \

15   7

輸出: 42

根據題意,最大路徑和可能出現在:左子樹中、右子樹中、包含根節點與左右子樹中。我們的思路是遞迴從 bottom 向 top return 的過程中,記錄左子樹和右子樹中路徑更大的那個,並向父節點提供當前節點和子樹組成的最大值。

遞迴設計:

1、返回值:(root.val) + max(left, right) 即此節點與左右子樹最大值之和,較差的解直接被捨棄,不會再被用到。

2、遞迴終止條件:越過葉子節點,返回 0;

3、記錄最大值:當前節點最大值 = root.val + left + right

4、最終返回所有路徑中的全域性最大值即可

public class maxpathsum_124 

}// maxsum代表最大路徑和

private int maxsum = integer.min_value;

private int maxpathsum(treenode root)

private int maxpath(treenode root)

int left = maxpath(root.left);

int right = maxpath(root.right);

maxsum = math.max(left + right + root.val, maxsum);

int temp = math.max(left, right) + root.val;

return temp > 0 ? temp : 0;

}}

LeetCode第124題 二叉樹中的最大路徑和

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

LeetCode第98題(驗證二叉搜尋樹)

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 1 3 輸出 true 示例 2 輸入 5 1 4 3 6 輸出 false 解釋 ...

LeetCode第110題 平衡二叉樹

給定乙個二叉樹,判斷它是否是高度平衡的二叉樹。本題中,一棵高度平衡二叉樹定義為 乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。示例 1 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回 true 示例 2 給定二叉樹 1,2,2,3,3,null,n...