2
public void findMaxSum(TreeNode node, long sum[]) {3
if (node == null) return;5
findMaxSum(node.left, sum);6
findMaxSum(node.right, sum);11
public long findProd(TreeNode node, long sum[], long[] max) {12
if (node == null) return 0;14
long left = findProd(node.left, sum, max);15
long right = findProd(node.right, sum, max);17
long val = left + right + node.val;19
max[0] = Math.max(max[0], val * (sum[0] - val));24
public int maxProduct(TreeNode root) {26
long max[] = new long[1];27
long sum[] = new long[1];29
findMaxSum(root, sum);31
long n = findProd(root, sum, max);33
return (int) (max[0] % ((int) 1e9 + 7));