给你一个array of treenodes, 检验是否是一个完整的二叉树
static boolean valid(TreeNode[] arr) {
Set<TreeNode> set = new HashSet<>();
for (TreeNode root: arr) {
if (set.contains(root.left)) {
return false;
}
if (set.contains(root.right)) {
return false
}
if (root.left != null)
set.add(root.left);
if (root.right != null)
set.add(root.right);
}
// 就剩下根不在set里面
if (set.size() != arr.length - 1) {
return false;
}
// 检验这些node 是否在tree的集合里
int cnt = 0;
for (TreeNode root: arr) {
if (set.contains(root))
cnt++;
}
return arr.length - cnt == 1;
}