news 2026/6/10 10:48:56

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/31 4:14:34

委内瑞拉互联网中断事件中的BGP异常分析

2026年1月2日至3日,委内瑞拉发生了一次全国性互联网中断(blackout),几乎所有主要网络服务提供商的连通性大幅下降。根据Cloudflare Radar公开监测平台的数据,此次中断持续数小时,影响了银行、通信、政府服务…

作者头像 李华
网站建设 2026/6/5 8:21:40

【好写作AI】轻松驾驭职场:用AI快速撰写专业邮件、报告与策划案

当别人还在为一封邮件措辞半小时,你已经用AI优雅地处理完所有书面任务,深藏功与名。从校园到职场,第一道坎常常是“书面沟通”。精心准备的汇报被说“重点不明”,一封简单的协作邮件反复修改仍像“学生作业”。这些看似细微的挑战…

作者头像 李华
网站建设 2026/6/8 18:07:43

深度剖析ST7789V驱动中的MADCTL寄存器设置

深度剖析ST7789V驱动中的MADCTL寄存器设置在嵌入式显示开发中,你是否曾遇到过这样的尴尬:明明代码逻辑清晰、绘图函数正常调用,可屏幕上的图像却上下颠倒、左右镜像,甚至颜色发紫?更离谱的是,旋转90度后画面…

作者头像 李华
网站建设 2026/6/9 7:48:05

使用ms-swift集成MathType编辑器输出科研报告结果

使用ms-swift集成MathType编辑器输出科研报告结果 在撰写科技论文或教学材料时,研究者常常面临一个令人头疼的问题:如何高效地将模型推理出的数学公式准确、美观地嵌入文档?手动输入不仅耗时费力,还容易出错;而即便AI能…

作者头像 李华
网站建设 2026/6/9 22:03:47

一个低成本的220V转12V 5V的阻容降压电路

这是电容降压式220V AC转为12V 5V DC的非隔离电源电路,核心利用电容容抗限流替代变压器降压,配合整流、稳压、滤波环节实现小功率直流供电,适用于低功耗设备(如小家电控制板、传感器),具体工作原理分降压限…

作者头像 李华
网站建设 2026/6/4 21:46:10

精准适配,让IPD咨询成为企业产品力增长引擎

集成产品开发(IPD)作为一套系统化的产品开发管理方法论,自IBM提出后经华为成功实践,已成为企业提升产品竞争力的核心工具。华为问界、三折叠手机等现象级产品的持续热销,印证了IPD体系在市场洞察、跨部门协同、高效研发…

作者头像 李华