路徑 被定義為一條從樹中任意節(jié)點(diǎn)出發(fā)兢孝,沿父節(jié)點(diǎn)-子節(jié)點(diǎn)連接局劲,達(dá)到任意節(jié)點(diǎn)的序列冰肴。同一個(gè)節(jié)點(diǎn)在一條路徑序列中 至多出現(xiàn)一次 屈藐。該路徑 至少包含一個(gè) 節(jié)點(diǎn),且不一定經(jīng)過根節(jié)點(diǎn)熙尉。
路徑和 是路徑中各節(jié)點(diǎn)值的總和联逻。
給你一個(gè)二叉樹的根節(jié)點(diǎn) root ,返回其 最大路徑和 检痰。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有包归。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處铅歼。
輸入:root = [1,2,3]
輸出:6
解釋:最優(yōu)路徑是 2 -> 1 -> 3 公壤,路徑和為 2 + 1 + 3 = 6
輸入:root = [-10,9,20,null,null,15,7]
輸出:42
解釋:最優(yōu)路徑是 15 -> 20 -> 7 ,路徑和為 15 + 20 + 7 = 42
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有椎椰。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán)厦幅,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
private:
int max_sum = INT_MIN;
public:
int maxPathSum(TreeNode* root) {
int ret = maxPath(root);
return max_sum;
}
int maxPath(TreeNode* root) {
if (root == nullptr) {
return 0;
}
int left = std::max(maxPath(root->left), 0);
int right = std::max(maxPath(root->right), 0);
int path_sum = root->val + left + right;
max_sum = std::max(max_sum, path_sum);
return root->val + std::max(left, right);
}
};
- 時(shí)間復(fù)雜度:O(N)O(N)慨飘,其中 NN 是二叉樹中的節(jié)點(diǎn)個(gè)數(shù)确憨。對(duì)每個(gè)節(jié)點(diǎn)訪問不超過 22 次。
- 空間復(fù)雜度:O(N)O(N)瓤的,其中 NN 是二叉樹中的節(jié)點(diǎn)個(gè)數(shù)休弃。空間復(fù)雜度主要取決于遞歸調(diào)用層數(shù)堤瘤,最大層數(shù)等于二叉樹的高度玫芦,最壞情況下,二叉樹的高度等于二叉樹中的節(jié)點(diǎn)個(gè)數(shù)本辐。