news 2026/5/14 3:41:21

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
leetcode 1339. 分裂二叉树的最大乘积 中等

给你一棵二叉树,它的根为root。请你删除 1 条边,使二叉树分裂成两棵子树,且它们子树和的乘积尽可能大。

由于答案可能会很大,请你将结果对 10^9 + 7 取模后再返回。

示例 1:

输入:root = [1,2,3,4,5,6]输出:110解释:删除红色的边,得到 2 棵子树,和分别为 11 和 10 。它们的乘积是 110 (11*10)

示例 2:

输入:root = [1,null,2,3,4,null,null,5,6]输出:90解释:移除红色的边,得到 2 棵子树,和分别是 15 和 6 。它们的乘积为 90 (15*6)

示例 3:

输入:root = [2,3,9,10,7,8,6,5,4,11,1]输出:1025

示例 4:

输入:root = [1,1]输出:1

提示:

  • 每棵树最多有50000个节点,且至少有2个节点。
  • 每个节点的值在[1, 10000]之间。

分析:当两个数的和为定值时,若想乘积最大,则两个数的差应当尽可能小。可以先 DFS 求出所有节点的和,再进行一次 DFS,对每个节点求出它的左子树和与右子树和,再分别检查这两个和与总结点和一半的距离,保留所有节点距离总和一般最近的值,最后求乘积即可。即 DFS 过程中先不计算乘积,最后只计算一次乘积。

/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ typedef struct node { struct node *left,*right; long long val,left_sum,right_sum; }node; void Free(node *p) { if(p==NULL)return; Free(p->left); Free(p->right); free(p); } node *build_tree(struct TreeNode *r) { if(r==NULL)return NULL; node *p=(node*)malloc(sizeof(node)); p->val=r->val*1LL; p->left=build_tree(r->left);p->right=build_tree(r->right); if(p->left!=NULL)p->left_sum=p->left->val+p->left->left_sum+p->left->right_sum; else p->left_sum=0; if(p->right!=NULL)p->right_sum=p->right->val+p->right->left_sum+p->right->right_sum; else p->right_sum=0; return p; } long long get_ans(node *p,long long total) { if(p==NULL)return 0; long long sum=0,sum_l=p->left_sum,sum_r=p->right_sum; if(sum_l*2>total)sum_l=total-sum_l; if(sum_r*2>total)sum_r=total-sum_r; sum=fmax(sum_l,sum_r); return fmax(sum,fmax(get_ans(p->left,total),get_ans(p->right,total))); } int maxProduct(struct TreeNode* root) { long long mod=1e9+7,sum=0,ans=0,total=0; node *r=build_tree(root);total=r->val+r->left_sum+r->right_sum; ans=get_ans(r,total); Free(r); return ans*(total-ans)%mod; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 9:06:18

对比评测:LITELLM vs 原生API开发效率提升300%

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个对比测试项目,分别使用原生API和LITELLM实现相同的大模型调用功能。要求:1) 实现5种常见NLP任务;2) 记录开发时间对比;3) 统…

作者头像 李华
网站建设 2026/4/27 22:52:03

Redis启动效率革命:传统vsAI生成命令对比评测

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 制作一个Redis启动命令效率对比工具,要求:1)记录用户手动输入命令的时间及错误次数 2)展示AI生成同功能命令的过程 3)对…

作者头像 李华
网站建设 2026/5/9 14:11:08

渗透测试全流程超详细解析:从入门到落地,一篇讲透核心逻辑

渗透测试流程到底是什么?这篇给你讲清楚(超详细) 0x01 主动扫描 通常来说,我们会先使用类似于AWVS 、Appscan等工具进⾏主动扫描;主动扫描这个过程主要旨在使用自动化工具解放双手发现漏洞。 对于主动扫描的软硬件产品,使用的方…

作者头像 李华
网站建设 2026/5/13 10:18:59

MCP IP地址冲突全解析(专家级排错指南)

第一章:MCP IP地址冲突的本质与影响IP地址冲突是网络通信中常见的故障现象,尤其在采用手动配置或混合DHCP分配策略的环境中更为频繁。当两个或多个设备被分配了相同的IP地址时,MCP(Management Control Protocol)网络中…

作者头像 李华
网站建设 2026/5/12 3:14:09

揭秘MCP实验题通关秘诀:5步实现高效精准操作

第一章:MCP实验题通关核心理念在解决MCP(Multi-Stage Computational Problems)类实验题目时,理解其设计背后的逻辑架构是成功的关键。这类问题通常模拟真实世界的系统行为,要求开发者不仅掌握基础编码能力,…

作者头像 李华
网站建设 2026/4/25 23:17:02

【好写作AI】用AI写小说:输入开头,让故事自动生长

当你的灵感卡在第一页,AI可以为你翻开一万种可能的下一页。写小说最痛苦的时刻,往往不是没有灵感,而是灵感像一群四处乱撞的鸟儿,不知该落在哪根枝头。你写下一个惊艳的开头,然后……就没有然后了。人物接下来该做什么…

作者头像 李华