日报
- 今天一道中等题。
- 又忘记取模wa啦!!!!
题目
一、 1339. 分裂二叉树的最大乘积
链接: 1339. 分裂二叉树的最大乘积
1. 题目描述
2. 思路分析
- 一下子想到了前几周分割图的那道题,树上时间戳啥的。
- 后来发现这题只需要删一条边,且本身是树,我们明确的知道父子关系。
- 显然删除一条边一定可以产生一个子树从树上脱落。
- 那么答案就是这个子树的和*另一边的和,另一边的和=总和-本子树。
- 因此我们可以dfs遍历一次,求出每个子树的子树和,对每个和进行上述公式运算,找最大即可。
- 因为是求max,只能在最后一步取模!
3. 代码实现
MOD=10**9+7
class Solution:
def maxProduct(self, root: Optional[TreeNode]) -> int:
sums = set()
def dfs(root):
if not root:
return 0
l = dfs(root.left )
r = dfs(root.right)
sums.add(l)
sums.add(r)
return l+r+root.val
fa = dfs(root)
return max((fa-s)*s for s in sums)%MOD