*选择后序是因为选择方向确定,如果是前序的话,root左右两个节点不好选择,而后序能避免此问题; *
从叶子节点开始选择,两个子节点的值中选择最大值,如果比0小,放弃此路径,否则,每次都取一棵小子树的最大值,即(左中右)
int ans=-INT32_MAX;
int dfs(TreeNode*root){
if(!root){
return 0;
}
int left=max(dfs(root->left),0);
int right=max(dfs(root->right),0);
ans=max(ans,root->val+left+right);
return root->val+max(left,right);
}
int maxPathSum(TreeNode* root) {
// write code here
if(root==nullptr)return 0;
dfs(root);
return ans;
}
京公网安备 11010502036488号