The idea is to find the sum of each subtree from bottom to top. Using hashmap to store its sum. After traversing the entire tree, I check if any node's hash value has the half of the root's hash value. If so, return true. Note that if root's hash value is an odd number, then there is no way we can split the tree.

```
class Solution {
public boolean checkEqualTree(TreeNode root) {
if(root == null) return false;
if(root != null && root.left == null && root.right == null) return false;
Map<TreeNode, Integer> map = new HashMap<>();
getSum(root, map);
if(map.get(root) % 2 != 0) return false;
return map.containsValue(map.get(root) / 2);
}
private void getSum(TreeNode root, Map<TreeNode, Integer> map){
if(root == null) return;
getSum(root.left, map);
getSum(root.right, map);
int sum = root.val;
if(root.left != null) sum += map.get(root.left);
if(root.right != null) sum += map.get(root.right);
map.put(root, sum);
}
}
```