AC:
用一个vector保存经过以该节点为终点的最大值和以该节点为路径中间点的值
int max(int a,int b)
{
if(a >= b)
{
return a;
}else
{
return b;
}
}
void dfs(TreeNode* root,vector<int>& vec,int& sum)
{
if(root == NULL)
{
return;
}
//sum+=root->val;
int leftsum=0;
int rightsum=0;
dfs(root->left,vec,leftsum);
dfs(root->right,vec,rightsum);
int maxi=max(max(leftsum+root->val,rightsum+root->val),root->val);
sum+=maxi;
vec.push_back(leftsum+root->val+rightsum);
vec.push_back(maxi);
}
int maxPathSum(TreeNode *root)
{
if(root == NULL)
{
return 0;
}
vector<int> vec;
int sum=0;
dfs(root,vec,sum);
int maxi=vec[0];
for(int i=1;i < vec.size();++i)
{
if(vec[i] > maxi)
{
maxi = vec[i];
}
}
return maxi;
}