给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
输入: [-10,9,20,null,null,15,7] -10 / \ 9 20 / \ 15 7 输出: 42
这一题,我看过之后,觉得只要比较左子树,右子树,和节点处的最大长度即可,于是就是得用递归来做
class Solution {
public:
int MMax=-999999;
int shenfind(TreeNode* node) {
int L=-99999;
int R=-99999;
if(node->left) L=shenfind(node->left);
if(node->right) R=shenfind(node->right);
if(L==-99999&&R==-99999)
{
MMax=(MMax>node->val)?MMax:node->val;
return node->val;
}
int max=-99999;
max=(L>R)?L:R;
max=(node->val>max)?node->val:max;
int a=L+node->val;
int b=R+node->val;
MMax=(MMax>max)?MMax:max;
max=node->val;
max=(max>a)?max:a;
max=(max>b)?max:b;
if(a>0){
if(R>0){
MMax=((R+a)>MMax)?(R+a):MMax;
}
else{
MMax=(a>MMax)?a:MMax;
}
return max;
}
else if(b>0){
MMax=(b>MMax)?b:MMax;
return max;
}
return max;
}
int maxPathSum(TreeNode* root) {
if(!root) return 0;
int vau=shenfind(root);
return (MMax>vau)?MMax:vau;
}
};