[力扣每日习题][1339]. 分裂二叉树的最大乘积 2026.01.07

[力扣每日习题][1339]. 分裂二叉树的最大乘积 2026.01.07

难度评级:中等

题目:

给你一棵二叉树,它的根为 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)

解题思路:DFS

        可以先计算得到所有节点的和,再通过数组存储所有子树的和,遍历数组的时候,计算:子树和  × (所有节点和 - 子树和),也就是分割成两个子树的乘积,找出最大的那一个乘积即可。

        深度优先搜索就是沿着一条路走到底,走不通了再回到上一层继续走。可以采用递归的方式实现,将根节点作为起始节点放入函数当中,函数需要完成如下操作:

        ① 定义 left 、 right、temp 3个参数,每次调用 DFS 函数的时候都需要重置为 0 ;

        ② 判断是否有左孩子,有就调用 DFS 函数,并且将函数的返回值存入 left 中,没有就下一步;

        ③ 判断是否有右孩子,有就调用 DFS 函数,并且将函数的返回值存入 right 中,没有就下一步;

        ④ 计算 temp = left + right + 当前节点的值;

        ⑤ 将 temp 存入子树和的数组中。

        ⑥ 返回 temp(当前子树的和);

        解析:根节点调用 DFS 函数的时候,会一直嵌套直到找到二叉树最左边的那个叶子节点,接下来,由于 left 和 right 为 0,那么 temp = 0 + 0 + 当前节点的值,将 temp 返回至上一层,也就是当前节点的父亲节点,父亲节点已经完成了 ② ,在这一层 left 的值是刚才计算得到的 temp,接下来进行 ③ ,如果没有右孩子那么 right = 0,在这一层的 temp = left + 0 + 当前节点的值,结束这层循环,再返回上一层。

        理解 DFS 的关键就是,先找到一条路一直到底,然后再慢慢往回退

        接下来我们用一颗二叉树来模拟一下这个 DFS 的流程。

        以如下二叉树为例,依次分析每个节点,下面是根节点的初始状态,将各个参数重置为 0,temp是当前节点孩子子树的和+当前节点值;注意这里的 left 和 right 分别指的左孩子子树的和、右孩子子树的和,不是左孩子和右孩子的值,在代码中为 left = DFS(2);right = DFS(3);是递归调用函数后返回的值。


        对于 1 这个节点,它有左孩子,那么这里需要递归调用 DFS 函数,将 2 这个节点作为根节点进行分析,对应着步骤 ②,2 这个节点进入后,它需要开始循环它的 DFS 函数。


        节点 2 有左孩子 4,那么将节点 4 作为根节点进行分析,调用 DFS 函数。


        此时节点 4 ,进行步骤 ②、③,由于它没有孩子,那么只能进行步骤 ④,计算 temp,最后将计算结果保存。


        第三层 4 进行步骤 ⑥,返回上一层,将计算结果返回给上一层对应调用 DFS(4)的那个参数,上一层调用 DFS(4)的是 第二层 2 在步骤 ② 的时候将左孩子进行递归调用 DFS,那么值就返回给第二层 2 的参数 left


        第二层 2 的步骤 ② 结束,现在进行步骤 ③ ,它有右孩子,那么将节点 5 调用 DFS 函数,作为根节点进行分析。


        节点 5,没有左右孩子,直接进行步骤 ④。


        进行步骤 ⑥,将值返回给上一层的 right。


        现在第三层 5 结束,第二层 2 进行步骤 ④,计算它自己的 temp。


        第二层 2 ,进行步骤 ⑥,将值返回给上一层的 left。


        第二层 2 结束,现在对一层 1 进行步骤 ③,它有右孩子,将右孩子递归调用 DFS


        节点 3 ,它没有左孩子,只有右孩子,那么它直接进行步骤 ③。


        第三层 6 ,没有孩子,是叶子节点,直接步骤 ④,计算 temp。


        进行步骤 ⑥,返回上一层,将值给上一层的 right。


        第二层 3 进行步骤 ④。


        进行步骤 ⑥,返回上一层,将值返回给上一层的 right。


        第一层 1 进行步骤 ④。


        最后进行步骤 ⑥,将最后的值返回即可,在递归调用的时候,所有的子树和都已计算并保存至一个数组,接下来只需要遍历数组,计算 每棵子树和  * (总和 - 该子树和) 找到最大值就可以了。


题解代码如下:

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: const int MOD = 1e9 + 7; long long dfs(TreeNode* root, vector<long long>& list){ long long l = 0; long long r = 0; long long temp = 0; if (root -> left != nullptr){ l = dfs(root -> left, list); } if (root -> right != nullptr){ r = dfs(root -> right, list); } temp = l + r + root -> val; list.push_back(temp); return temp; } int maxProduct(TreeNode* root) { vector <long long> list; // 用于存储所有子树和 long long sum = dfs(root, list); long long res = 0; for (auto i:list){ long long cal = i * (sum - i); if (cal > res){ res = cal; } } return res % MOD; } };

优化思路:暂无。

Read more

Python(30)基于itertools生成器的量子计算模拟技术深度解析

Python(30)基于itertools生成器的量子计算模拟技术深度解析

目录 * 引言:生成器与量子计算的完美邂逅 * 一、itertools生成器核心机制解析 * 1.1 无限序列生成器三剑客 * 1.2 组合生成器深度应用 * 二、量子计算模拟中的生成器革命 * 2.1 量子门序列动态生成 * 2.2 量子蒙特卡洛模拟优化 * 2.3 变分量子算法参数优化 * 三、生成器在量子计算中的创新应用 * 3.1 量子电路版本控制 * 3.2 量子数据流处理 * 四、生成器与量子计算的深度融合 * 4.1 量子退火算法优化 * 4.2 量子机器学习数据增强 * 五、生成器在量子计算中的性能优化 * 5.1 核心作用 * 5.2 优化方向 * 5.3 内存效率对比 * 5.

By Ne0inhk
ksycopg2实战:Python连接KingbaseES数据库的完整指南

ksycopg2实战:Python连接KingbaseES数据库的完整指南

摘要:本文详细介绍了KingbaseES数据库的Python专用驱动ksycopg2的使用方法。内容涵盖驱动安装、连接配置、CRUD操作等基础功能,以及事务管理、连接池等高级特性。ksycopg2作为遵循Python DBAPI 2.0规范的线程安全适配器,针对KingbaseES进行了深度优化,支持数据类型映射、批量操作等特性。文章提供了完整的业务表创建示例和员工管理系统实战案例,包含环境配置、性能优化建议和常见问题解决方案,帮助开发者快速掌握该驱动的使用技巧。通过详细的代码示例,展示了如何高效安全地操作KingbaseES数据库。 一、安装ksycopg2:KingbaseES的Python ksycopg2是 专为KingbaseES数据库设计的Python适配器 ,完全遵循Python DB API 2.0规范,具有线程安全的特性。它不仅提供了高效的数据操作能力,还支持KingbaseES特有的功能特性。 与通用的PostgreSQL驱动psycopg2相比,ksycopg2针对KingbaseES进行了深度优化,特别是在数据类型映射、事务处理和高级功能支持方面表现更加

By Ne0inhk
2025华为OD机试真题最新题库 (B+C+D+E+2025A+2025B卷) + 在线OJ在线刷题使用(C++、Java、Python C语言 JS合集)(正在更新2025B卷,目前已收录710道)

2025华为OD机试真题最新题库 (B+C+D+E+2025A+2025B卷) + 在线OJ在线刷题使用(C++、Java、Python C语言 JS合集)(正在更新2025B卷,目前已收录710道)

2025年,已经开始使用AB卷题库,题目和往期一样,旧题加新题的组合,有题目第一时间更新,大家可以跟着继续学习,目前使用复用题较多,可在OJ上直接找到对应的AB卷学习,可以放心学习,一次订阅永久阅读,支持在线刷题,持续更新,有问题随时解答,本专栏题目数量已收录到630道。每篇文章的思路分析都非常详细,题目新增图解思路,问题解疑,多样例测试,超过百字的思路参考解析 华为OD2025年B卷+2025年A卷+E卷+D卷+C卷 目录链接OD 真题目录 OJ+2025B卷最新OD机试 (C++ Java Py C语言 JS) 面试真题目录 OD面试高频手撕代码&八股文 华为OD机试2025B卷题目 题目考点 or 实现分值662、静态扫描 逻辑分析100663、机房布局 逻辑分析、区间分析100664、人数最多的站点/小火车最多人时所在园区站点 逻辑分析、区间分析100665、

By Ne0inhk
YOLOv8【第十一章:视频追踪与流处理篇·第2节】卡尔曼滤波(Kalman Filter)数学原理及其在追踪中的 Python 实现!

YOLOv8【第十一章:视频追踪与流处理篇·第2节】卡尔曼滤波(Kalman Filter)数学原理及其在追踪中的 Python 实现!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。 部分章节也会结合国内外前沿论文与 AIGC 等大模型技术,对主流改进方案进行重构与再设计,内容更偏实战与可落地,适合有工程需求的同学深入学习与对标优化。 ✨特惠福利:当前限时活动一折秒杀,一次订阅,终身有效,后续所有更新章节全部免费解锁,👉 点此查看详情 🎯 本文定位:计算机视觉 × 视频追踪与流处理系列 📅 更新时间:2026年 🏷️ 难度等级:⭐⭐⭐⭐⭐(高级进阶) 🔧 技术栈:Python 3.9+ · PyTorch

By Ne0inhk