均匀树划分:能否分成两棵节点值之和相等的子树

663. 均匀树划分

图片&文件

  • 整棵树所有节点之和 rootSum
    • 那么如果存在一棵和为 treeSum / 2 的子树,就说明这棵二叉树是可以分解成两部分的
  • rootSum 时,别使用 sum(root)
    • 而是用 root.val + sum(root.left) + sum(root.right);
var checkEqualTree = function (root) {
    let mapping = {};

    function sum(root) {
        if (!root) return null;
        let left = sum(root.left);
        let right = sum(root.right);
        let res = left + right + root.val;
        mapping[res] = 1;
        return res;
    }
    // 不要 sum(root) mapping 中应该只存储子树的元素和
    let rootSum = root.val + sum(root.left) + sum(root.right);
    if (rootSum % 2 !== 0) return false; // 不能平分这不能均分
    // 是否有子树的和为 treeSum / 2
    return !!mapping[rootSum / 2];
};