原题链接:https://leetcode-cn.com/problems/maximum-product-of-splitted-binary-tree/
后续遍历+记忆化
vector<long> vec;//存储每个节点及其子节点和
int maxProduct(TreeNode* root) {
long mod=1000000007;
long sum_r=proSearch(root);//后序遍历
int size=vec.size();
long ans=INT_MIN;
for(int i=0;i<size-1;i++){
ans=max(ans,(sum_r-vec[i])*vec[i]);//计算最大乘积
}
return ans%mod;
}
long proSearch(TreeNode* root){
if(root==NULL) return 0;
TreeNode* p=root;
long left=0,right=0;
if(p->left!=NULL){
left=proSearch(p->left);
vec.push_back(left);
}
if(p->right!=NULL){
right=proSearch(p->right);
vec.push_back(right);
}
vec.push_back(p->val+left+right);//存储每个节点及其子节点和
return p->val+left+right;
}
注意:不能在计算(sum_r-vec[i])*vec[i]
时进行%mod,因为原先较大的数%mod之后不见得较大,应该先用long存储,最后再%mod