本題可以對比左神演算法中的:二叉樹中的最遠距離,只不過最遠距離中沒有考慮權重的問題,本題需要考慮每個節點的權重問題,還是有所區別的。
題目:給定乙個非空二叉樹,返回其最大路徑和。
本題中,路徑被定義為一條從樹中任意節點出發,達到任意節點的序列。該路徑至少包含乙個節點,且不一定經過根節點。
示例 1:根據題意,最大路徑和可能出現在:左子樹中、右子樹中、包含根節點與左右子樹中。我們的思路是遞迴從 bottom 向 top return 的過程中,記錄左子樹和右子樹中路徑更大的那個,並向父節點提供當前節點和子樹組成的最大值。輸入: [1,2,3]
1
/ \
2 3
輸出: 6
示例 2:
輸入: [-10,9,20,null,null,15,7]
-10/ \
920
/ \
15 7
輸出: 42
遞迴設計:
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...