题意:
给定一棵有 n 个结点的二叉树,你的任务是检查是否可以通过去掉树上的一条边将树分成两棵,且这两棵树结点之和相等。
题解:
树型dp,dp【i】代表i节点和它子树节点的总和,那么,我们先求出dp【root】,然后再判断是否存在某一个点,它的dp【i】= sum - dp【i】。如果有就返回true,否则返回false。
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {boolean}
*/
let total;
let flag;
let t;
var getSum = function(root) {
if(root == null) return 0;
let ls = getSum(root.left);
let rs = getSum(root.right);
if(t && 2*(ls + rs + root.val) == total)flag = true;
return ls + rs + root.val;
}
var checkEqualTree = function(root) {
flag = t = false
total = getSum(root)
t = true;
getSum(root.left);
getSum(root.right);
if(flag)return true;
else return false;
};