-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathsolution1.js
39 lines (38 loc) · 888 Bytes
/
solution1.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/**
* https://leetcode-cn.com/problems/maximum-product-of-splitted-binary-tree/
*
* 1339. 分裂二叉树的最大乘积
*
* Medium
*
* 考察点:
* - 二叉树
* - 哈希表
*
* 220ms 57.14%
* 70.2mb 100.00%
*
*/
const MAX_NUMBER = 10 ** 9 + 7;
const maxProduct = root => {
const recordSubSum = new Set();
const sum = computedSum(root, recordSubSum);
let ans = 0;
for (const subSum of recordSubSum.values()) {
ans = Math.max((sum - subSum) * subSum, ans);
}
return ans % MAX_NUMBER;
}
function computedSum(root, recordSubSum) {
if (!root) {
return 0;
}
const rootVal = root.val;
const leftSum = computedSum(root.left, recordSubSum);
const rightSum = computedSum(root.right, recordSubSum);
const sum = rootVal + leftSum + rightSum;
recordSubSum.add(leftSum);
recordSubSum.add(rightSum);
recordSubSum.add(sum);
return sum;
}