class Solution {
public:
int maxSum = INT_MIN;
int maxPathSum(TreeNode* root) {
dfs(root);
return maxSum;
}
int dfs(TreeNode* root) { // 返回以root开头为节点的最大路径长度
if(!root) return 0;
int left = max(dfs(root->left), 0); // 分支是否有选取的必要,至少大于0
int right = max(dfs(root->right), 0);
maxSum = max(maxSum, left+right+root->val); // 选取中间节点相连的和
return max(left, right) + root->val;// 选取最大分支构成root开头最大路径长
}
};
京公网安备 11010502036488号