T1:leetcode.1339 分裂二叉树的最大乘积
class Solution {
public:
long long ans = 0;
int n = 0;
unordered_map<TreeNode*, int> umap;
int getSum(TreeNode* root) {
if (root == nullptr) return 0;
umap[root] = root->val + getSum(root->left) + getSum(root->right);
return umap[root];
}
void dfs(TreeNode* root) {
if (root->left) {
ans = max(ans, (long long)umap[root->left] * (n - umap[root->left]));
dfs(root->left);
}
if (root->right) {
ans = max(ans, (long long)umap[root->right] * (n - umap[root->right]));
dfs(root->right);
}
}
int maxProduct(TreeNode* root) {
n = getSum(root);
ans = 0;
dfs(root);
return ans % 1000000007;
}
};