It is easy to observe that we need to split the sizes of the subtrees evenly. The problem is transformed to the following basic pattern:
Given an array a, find a way to partition a into two parts, such that the difference between the sum of these two parts is minimized.
This can be solved via knapsack DP. Note that we don’t need to calculate the sizes of subtrees before running the DP, we can do this while traversing the tree. The resulting time complexity is O(n2).