1339. 分裂二叉树的最大乘积


这道题关键突破点就是先算出节点总和,然后找到一颗子树总和最接近总和的一半。
乘积最大基本就是先要求总和,然后找到最接近总和一半。
关键就是这一步,找到最适合子树的和。

点击查看代码
    if(abs(2*cur-sum)<abs(2*best-sum)){
        best=cur;
    }
完整代码:
点击查看代码
class Solution {
public:
int sum=0;
int best=0;
void bfs1(TreeNode*root){
    if(!root){return ;}
    sum+=root->val;
    bfs1(root->left);
    bfs1(root->right);
}
int bfs2(TreeNode*root){
    if(!root){return 0;}
    int cur=root->val+bfs2(root->left)+bfs2(root->right);
    if(abs(2*cur-sum)<abs(2*best-sum)){
        best=cur;
    }
    return cur;
}
    int maxProduct(TreeNode* root) {
bfs1(root);
int k=bfs2(root);
return best*(sum-best);
    }
};
posted @ 2024-02-13 21:09  yun-che  阅读(17)  评论(0)    收藏  举报