import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类 the root
* @return bool布尔型一维数组
*/
public boolean[] judgeIt (TreeNode root) {
boolean[] result = new boolean[2];
result[0] = isTwoSearchTree(root, null, null);
result[1] = isFullTree(root);
return result;
}
// 是否为二叉搜索树
public boolean isTwoSearchTree(TreeNode root, Integer min, Integer max){
if (root == null) {
return true;
}
// 如果root值小于最低项则不是搜索二叉树
if (min != null && root.val <= min) {
return false;
}
// 如果root值大于最高项,也不是二叉搜索树
if (max != null && root.val >= max) {
return false;
}
boolean leftFlg = isTwoSearchTree(root.left, min, root.val);
boolean rightFlg = isTwoSearchTree(root.right, root.val, max);
return leftFlg && rightFlg;
}
// 验证是否为完全二叉树
public boolean isFullTree(TreeNode root){
if(root == null){
return false;
}
LinkedList<TreeNode> queue = new LinkedList();
queue.offer(root);
while(!queue.isEmpty()){
TreeNode temp = queue.poll();
if (temp != null) {
queue.offer(temp.left);
queue.offer(temp.right);
} else {
// 如果节点为nul,则去判断后面的节点中是否还存在不为null,
// 如果还存在不为null的节点,则不是完全二叉树
// 因为完全二叉树,要么叶子节点都是满的,要么都聚集在左节点上,所以聚集在左节点上,所有的null都在最后面。
while (!queue.isEmpty()) {
TreeNode leafNode = queue.poll();
if (leafNode != null) {
return false;
}
}
}
}
return true;
}
}