Equal Tree Partition

medium dfs tree

Problem

Can we remove one edge to split the tree into two with equal sum?

Inputtree=[5,10,10,null,null,2,3]
OutputTrue
Cut edge between 5 and right child → 5+10=15 each.

def check_equal_tree(root):
    sums = []
    def dfs(n):
        if not n: return 0
        s = n.val + dfs(n.left) + dfs(n.right); sums.append(s); return s
    total = dfs(root); sums.pop()
    return total % 2 == 0 and total // 2 in sums
function checkEqualTree(root) {
  const sums = [];
  const dfs = n => { if (!n) return 0; const s = n.val + dfs(n.left) + dfs(n.right); sums.push(s); return s; };
  const total = dfs(root); sums.pop();
  return total % 2 === 0 && sums.includes(total / 2);
}
boolean checkEqualTree(TreeNode root) {
    List sums = new ArrayList<>();
    int total = dfs(root, sums); sums.remove(sums.size() - 1);
    return total % 2 == 0 && sums.contains(total / 2);
}
int dfs(TreeNode n, List sums) {
    if (n == null) return 0;
    int s = n.val + dfs(n.left, sums) + dfs(n.right, sums); sums.add(s); return s;
}
int dfs(TreeNode* n, vector& s) { if (!n) return 0; int v = n->val + dfs(n->left, s) + dfs(n->right, s); s.push_back(v); return v; }
bool checkEqualTree(TreeNode* root) {
    vector s; int total = dfs(root, s); s.pop_back();
    return total % 2 == 0 && find(s.begin(), s.end(), total / 2) != s.end();
}
Time: O(n) Space: O(n)