Skip to content

Commit 89e93d7

Browse files
committed
add: 1339. Maximum Product of Splitted Binary Tree
1 parent 43e14b2 commit 89e93d7

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
{
2+
/**
3+
* Runtime 241 ms Beats 66.67%
4+
* Memory 86.2 MB Beats 33.33%
5+
*/
6+
7+
/**
8+
* Definition for a binary tree node.
9+
*/
10+
class TreeNode {
11+
val: number;
12+
left: TreeNode | null;
13+
right: TreeNode | null;
14+
constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
15+
this.val = val === undefined ? 0 : val;
16+
this.left = left === undefined ? null : left;
17+
this.right = right === undefined ? null : right;
18+
}
19+
}
20+
21+
const getSum = (node: TreeNode | null): [number, number[]] => {
22+
const sumList: number[] = [];
23+
24+
const dfs = (node: TreeNode | null) => {
25+
if (!node) {
26+
return 0;
27+
}
28+
const leftSum = dfs(node.left);
29+
const rightSum = dfs(node.right);
30+
const sum = leftSum + rightSum + node.val;
31+
sumList.push(sum);
32+
return sum;
33+
};
34+
35+
const sum = dfs(node);
36+
37+
return [sum, sumList];
38+
};
39+
40+
const maxProduct = (root: TreeNode | null): number => {
41+
if (!root) {
42+
return 0;
43+
}
44+
45+
let max = 0;
46+
const MOD = 10 ** 9 + 7;
47+
48+
const [totalSum, sumList] = getSum(root);
49+
50+
for (const sum1 of sumList) {
51+
const sum2 = totalSum - sum1;
52+
max = Math.max(max, sum1 * sum2);
53+
}
54+
55+
return max % MOD;
56+
};
57+
58+
console.log(
59+
maxProduct(
60+
new TreeNode(
61+
1,
62+
new TreeNode(2, new TreeNode(4), new TreeNode(5)),
63+
new TreeNode(3, new TreeNode(6))
64+
)
65+
)
66+
);
67+
}

0 commit comments

Comments
 (0)