給定乙個非空二叉樹,返回其最大路徑和。
本題中,路徑被定義為一條從樹中任意節點出發,達到任意節點的序列。該路徑至少包含乙個節點,且不一定經過根節點。
示例 1:
輸入: [1,2,3]
1/ \
2 3
輸出: 6
示例 2:
輸入: [-10,9,20,null,null,15,7]
-10/ \
9 20
/ \
15 7
輸出: 42
思路:分治+遞迴
二叉樹的最大值等於其所有子樹的最大值中的最大值,對於葉子節點其最大值等於他本身;
package leetcode;
/** * @classname q124
* @description
* * @author m
* @version 1.0
*/public
class
q124
/** * 通過遞迴查詢當前節點往下走能獲得的最大值,
* 過程中不斷更新最大值
* @param root
* @return
*/public
intdfs
(treenode root)
//分別計算左右節點的最大值,如果小於0按0算,即不繼續往下走
int leftgain = math.
max(
dfs(root.left),0
);int rightgain = math.
max(
dfs(root.right),0
);//更新最大值,這裡是找當前子樹所能獲得的最大結果,是區域性最大值,
// 通過不斷比較區域性最大值獲得全域性最大值,即分治的思想
max = math.
max(max, root.val+leftgain+rightgain)
;//返回當前結點的最大值
return root.val + math.
max(leftgain,rightgain);}
}
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 沒看題解獨自...