> For the complete documentation index, see [llms.txt](https://mayanktyagi3111.gitbook.io/interview-prep/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mayanktyagi3111.gitbook.io/interview-prep/trees/maximum-product-of-splitted-binary-tree.md).

# Maximum Product of Splitted Binary Tree

Given a binary tree `root`. Split the binary tree into two subtrees by removing 1 edge such that the product of the sums of the subtrees are maximized.

Since the answer may be too large, return it modulo 10^9 + 7.

**Example 1:**

![](https://assets.leetcode.com/uploads/2020/01/21/sample_1_1699.png)

```
Input: root = [1,2,3,4,5,6]
Output: 110
Explanation: Remove the red edge and get 2 binary trees with sum 11 and 10. Their product is 110 (11*10)
```

**Example 2:**

![](https://assets.leetcode.com/uploads/2020/01/21/sample_2_1699.png)

```
Input: root = [1,null,2,3,4,null,null,5,6]
Output: 90
Explanation:  Remove the red edge and get 2 binary trees with sum 15 and 6.Their product is 90 (15*6)
```

**Example 3:**

```
Input: root = [2,3,9,10,7,8,6,5,4,11,1]
Output: 1025
```

**Example 4:**

```
Input: root = [1,1]
Output: 1
```

**Constraints:**

* Each tree has at most `50000` nodes and at least `2` nodes.
* Each node's value is between `[1, 10000]`.

```java
class Solution {
    long sum, maxProd, mod = 1_000_000_007;

    public void DFS(TreeNode root) {
        if (root == null)
            return;
        sum += (long) root.val;
        DFS(root.left);
        DFS(root.right);
    }

    public long checkMax(TreeNode root) {
        if (root == null)
            return 0L;
        long treeSum = root.val;
        treeSum += checkMax(root.left);
        treeSum += checkMax(root.right);
        maxProd = Math.max(maxProd, treeSum * (sum - treeSum));
        return treeSum;
    }

    public int maxProduct(TreeNode root) {
        sum = maxProd = 0;
        DFS(root);
        long rootProd = checkMax(root);
        return (int) (maxProd % mod);
    }
}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://mayanktyagi3111.gitbook.io/interview-prep/trees/maximum-product-of-splitted-binary-tree.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
