1、题目描述
2、解题思路
本题要求是拆分成两棵树,两棵树的元素和一样。
先求出整棵树的元素和 sum;
于是问题就变为:是否存在子树,它的元素和为 sum/2 。
3、解题代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
List<Integer> list = new ArrayList<>();
public boolean checkEqualTree(TreeNode root) {
int all = sum(root);
// 总和是奇数,不可能分成两个和相等的二叉树
if (all % 2 != 0) return false;
int half = all / 2;
// 现在问题转化为:root 树是否存在元素和为 half 的子树
list.remove(list.size()-1); // 求子树,不要把 root 算进去
return list.contains(half);
}
/**
* 求二叉树的元素总和
*
* @param node
* @return
*/
public int sum(TreeNode node) {
int ans = node.val;
if (node.left != null) ans += sum(node.left);
if (node.right != null) ans += sum(node.right);
list.add(ans); // 顺便记下 node 子树和
return ans;
}
}