题目描述:
给定一棵有 n 个结点的二叉树,你的任务是检查是否可以通过去掉树上的一条边将树分成两棵,且这两棵树结点之和相等。
样例 1:
输入:
输出: True
解释:
和: 15
和: 15
样例 2:
输入:
输出: False
解释: 无法通过移除一条树边将这棵树划分成结点之和相等的两棵子树。
注释 :
树上结点的权值范围 [-100000, 100000]。
1 <= n <= 10000
方法1:
主要思路:
(1)先计算出各个结点作为根节点的时,对应的子树的和,并统计出原来树的所有结点的总和;
(2)判断原来树的所有结点的总和是否为奇数,若为奇数,则直接返回false;
(3)比较易混的是原来树的所有结点的总和为0时的情形,此时需要判断为0时,则需要出现大于一次才行,不为0时,则原来所有结点的总和的一半需要出现过才行;
(4)否则,返回false;
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), le