**結果
給定乙個非空二叉樹,返回其最大路徑和。
二叉樹 abc,a 是根結點(遞迴中的 root),bc 是左右子結點(代表其遞迴後的最優解)。
已知要求的路徑無論是從哪兒開始怎麼開始,最終的形式都是原二叉樹的乙個子樹,若這個子樹只有乙個節點,則最大路徑只包含乙個節點;若這棵子樹不止含有乙個節點,就通過遞迴演算法來求得左/右子樹的最大貢獻值再根據它們求父節點的最大貢獻值。
若要計算以某個節點為根的樹中的最大路徑,考慮實現乙個函式:maxgain()
來計算,命名為該節點的最大貢獻值。
最大貢獻值是要遞迴來實現的。
具體演算法如下:
根據以上的遞迴演算法,可以得知只要對根節點呼叫一次maxgain()
函式即可算出整棵樹中最長的路徑
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution
// 遞迴計算左右子節點的最大貢獻值
// 只有在最大貢獻值大於 0 時,才會選取對應子節點
int leftgain =
max(
maxgain
(node-
>left),0
);int rightgain =
max(
maxgain
(node-
>right),0
);// 節點的最大路徑和取決於該節點的值與該節點的左右子節點的最大貢獻值
int pricenewpath = node-
>val + leftgain + rightgain;
maxsum =
max(maxsum, pricenewpath)
;// 返回節點的最大貢獻值
return node-
>val +
max(leftgain, rightgain);}
intmaxpathsum
(treenode* root)
};
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 沒看題解獨自...