力扣刷题记录: 1339. 分裂二叉树的最大乘积

        本题是第174场周赛的 Q3,LC竞赛分为1675.

方法一. 递归(超时)

        单纯使用递归对每一个节点进行遍历,代码如下:

class Solution {
    long long ans = -1;
public:
    int maxProduct(TreeNode* root) {
        long long total_sum = sum(root);

        dfs(root,total_sum);

        return ans%(int)(1e9+7);
    }

    long long sum(TreeNode* root){
        if(root == NULL) return 0;

        return root->val+sum(root->left)+sum(root->right);
    }

    void dfs(TreeNode* root,long long total_sum){
        if(!root) return;

        long long a1 = sum(root);
        long long a2 = total_sum-a1;
        ans = max(a1*a2,ans);

        dfs(root->left,total_sum);
        dfs(root->right,total_sum);
    }
};

方法二. 后序遍历+记忆化搜索(时间超过 11.89% cpp用户)

        后序遍历+记忆化搜索可以让父节点直接用到子节点的结果,从而减少递归调用。代码如下:

class Solution {
    long long ans = -1;
public:
    int maxProduct(TreeNode* root) {
        long long total_sum = sum(root);
        map<TreeNode*,long long> record;
        dfs(root,total_sum,record);

        return ans%(int)(1e9+7);
    }

    long long sum(TreeNode* root){
        if(root == NULL) return 0;

        return root->val+sum(root->left)+sum(root->right);
    }

    void dfs(TreeNode* root,long long total_sum,map<TreeNode*,long long>& record ){
        if(!root) return;

        dfs(root->left,total_sum,record);
        dfs(root->right,total_sum,record);
        long long a1,a2;
        if(record.count(root->left)==1){
            a1 = record[root->left];
        }
        else
            a1 = sum(root->left);
        
        if(record.count(root->right)==1){
            a2 = record[root->right];
        }
        else
            a2 = sum(root->right);
        
        long long sum_tmp = a1 + a2 + root->val;
        record[root] = sum_tmp;
        ans = max(ans,sum_tmp*(total_sum-sum_tmp));
        return;
    }
};

相关推荐

  1. 记录1339. 分裂乘积

    2024-06-13 11:08:04       13 阅读
  2. -

    2024-06-13 11:08:04       5 阅读
  3. 2024.3.26记录-学习记录1(未完)

    2024-06-13 11:08:04       19 阅读
  4. 2024.3.30记录-学习记录2(未完)

    2024-06-13 11:08:04       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-13 11:08:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-13 11:08:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-13 11:08:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-13 11:08:04       20 阅读

热门阅读

  1. Oracle数据库-重点信息查询方法

    2024-06-13 11:08:04       7 阅读
  2. 【前端】vue在线编辑器

    2024-06-13 11:08:04       12 阅读
  3. 北京汽车美容元宇宙,未来已来

    2024-06-13 11:08:04       11 阅读
  4. C#A类调用B类的方法,在方法中更新B类的控件

    2024-06-13 11:08:04       9 阅读
  5. 注解 - @RequestPart

    2024-06-13 11:08:04       7 阅读
  6. 设计模式-原型模式

    2024-06-13 11:08:04       10 阅读
  7. PostgreSQL 数据类型详细说明

    2024-06-13 11:08:04       9 阅读
  8. Elasticsearch-IndexTemplate和DynamicTemplate 有什么区别

    2024-06-13 11:08:04       5 阅读
  9. 1分钟带你了解代付业务|代付业务简介

    2024-06-13 11:08:04       6 阅读