/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
int total = 0;
long long res = INT_MIN;
void getTatal(TreeNode* root)
{
queue<TreeNode*>q;
q.push(root);
while(!q.empty())
{
TreeNode *cur = q.front();
q.pop();
total += cur->val;
if(cur->left != NULL)
{
q.push(cur->left);
}
if(cur->right != NULL)
{
q.push(cur->right);
}
}
}
void check(long long leftSum,long long rightSum)
{
long long product = leftSum*rightSum;
if(product > res)
{//不能在这里取模!!!
res = product;
}
}
int calculate(TreeNode *root)
{
if(root != NULL)
{
int temp = root->val + calculate(root->left) + calculate(root->right);//这句看了别人的才写出来
check((long long) temp,(long long) total - temp);
return temp;
}
return 0;
}
public:
int maxProduct(TreeNode* root) {
getTatal(root);
calculate(root);
return res%1000000007;
}
};