Maximum Product of Splitted Binary Tree

Medium
Watch on YouTube ↗

Solution

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    long max;
    int total;
    int mod = 1_000_000_007;
    public int maxProduct(TreeNode root) {
        // O(n) + O(n) = O(n)
        // O(n)
        total = getSum(root);
        helper(root);
        return (int)(max%mod);
    }

    int getSum(TreeNode root) {
        if(root==null)
            return 0;
        return root.val + getSum(root.left) + getSum(root.right);
    }

    int helper(TreeNode root) {
        if(root==null) {
            return 0;
        }
        int leftsum = helper(root.left);
        int rightsum = helper(root.right);

        max = Math.max(max, (long)leftsum*(total-leftsum));
        max = Math.max(max, (long)rightsum*(total-rightsum));

        return root.val + leftsum + rightsum;
    }
}