1
var maxProduct = function (root) {2
const lefteRightSumMap = new Map();4
function getLeftRightSumMap(node) {5
if (node === null) return 0;7
let leftSum = getLeftRightSumMap(node.left);8
let rightSum = getLeftRightSumMap(node.right);10
lefteRightSumMap.set(node, { leftSum, rightSum });12
return leftSum + rightSum + node.val;15
getLeftRightSumMap(root);17
let maxProduct = -Infinity;19
function getMaxProductDFS(node, parentSum) {20
if (node === null) return;22
const { leftSum, rightSum } = lefteRightSumMap.get(node);25
maxProduct = Math.max(27
leftSum * (parentSum + node.val + rightSum)31
maxProduct = Math.max(33
rightSum * (parentSum + node.val + leftSum)36
getMaxProductDFS(node.left, parentSum + node.val + rightSum);37
getMaxProductDFS(node.right, parentSum + node.val + leftSum);40
getMaxProductDFS(root, 0);42
return maxProduct % (Math.pow(10, 9) + 7);