2
def maxProduct(self, root: Optional[TreeNode]) -> int:3
def findTotalSum(node, totalSum):6
totalSum = findTotalSum(node.left, totalSum)8
totalSum = findTotalSum(node.right, totalSum)11
def dfs(node, maxProd, totalSum):14
if not node.left and not node.right:15
return maxProd, node.val16
maxProd, lSum = dfs(node.left, maxProd, totalSum)17
maxProd, rSum = dfs(node.right, maxProd, totalSum)18
subTreeSum = lSum + rSum + node.val21
(totalSum - lSum) * lSum,22
(totalSum - rSum) * rSum,23
(totalSum - subTreeSum) * subTreeSum,25
return maxProd, subTreeSum27
totalSum = findTotalSum(root, 0)28
product, _ = dfs(root, 1, totalSum)29
return product % (pow(10, 9) + 7)