news 2026/3/24 21:22:16

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/3/24 7:34:39

医疗影像用ResNet分类更准

📝 博客主页:jaxzheng的CSDN主页 医疗影像分类的精准与透明:ResNet的准确性优势与可解释性挑战目录医疗影像分类的精准与透明:ResNet的准确性优势与可解释性挑战 引言:精准的悖论 一、技术应用场景应用价值&#xff1a…

作者头像 李华
网站建设 2026/3/23 2:22:53

快速验证创意:用FRP+快马1小时搭建IoT原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个IoT设备远程控制原型系统,包含:1.FRP穿透树莓派SSH 2.Web控制界面模拟开关/传感器 3.MQTT消息中转服务 4.设备状态可视化仪表盘 5.模拟告警推送功能…

作者头像 李华
网站建设 2026/3/22 10:50:18

STM32 CubeMX配置ADC模块:系统学习教程

从零开始掌握STM32 ADC采集:CubeMX配置实战与避坑指南你有没有遇到过这样的场景?接了一个NTC温度传感器,代码跑起来后串口打印的电压值跳来跳去,像是在“抽搐”;或者想同时读几个模拟通道,结果数据顺序错乱…

作者头像 李华
网站建设 2026/3/12 13:38:29

生成对抗网络(GAN)十年演进(2015–2025)

生成对抗网络(GAN)十年演进(2015–2025) 一句话总论: 2015年GAN还是“Ian Goodfellow论文低分辨率模糊人脸”的学术爆发起点,2025年已进化成“万亿级多模态扩散/VLA大模型物理一致性意图级控制量子加速自进…

作者头像 李华
网站建设 2026/3/24 20:59:33

未成年人直播打赏诱导语句可被Qwen3Guard-Gen-8B发现

未成年人直播打赏诱导语句可被Qwen3Guard-Gen-8B发现 在一场深夜的直播中,某主播轻声细语地对镜头前的观众说:“宝贝给你买糖吃,刷个小心心好吗?”这句话看似无害,甚至带着几分童趣。然而,在内容安全专家眼…

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

3分钟搞定LabelMe:容器化安装方案对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个比较传统安装和容器化安装LabelMe的效率测试工具。功能包括:1.自动计时两种安装方式耗时 2.记录资源占用情况 3.生成对比图表 4.提供性能优化建议 5.支持一键切…

作者头像 李华