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] = isBST(root);
result[1] = isCBT(root);
return result;
}
//思想:对给定的二叉树进行中序遍历,若始终保持前一个值比后面一个值小,则其为二叉排序树
private boolean isBST(TreeNode root){
LinkedList<TreeNode> stack = new LinkedList<>();
TreeNode p = root;
int pre = -32767; //pre为最小值
while(p != null || !stack.isEmpty()){
if(p != null){
stack.addFirst(p);
p = p.left;
}
else{
p = stack.removeFirst();
if(pre > p.val){
return false;
}
else{
pre = p.val;
}
p = p.right;
}
}
return true;
}
//思想:对给定的二叉树进行层序遍历,将所有节点加入队列(包括空结点)。当遇到空结点时,查看其后是否有空结点,若有则不是完全二叉树
private boolean isCBT(TreeNode root){
Queue<TreeNode> queue = new LinkedList<>();
TreeNode p;
queue.offer(root);
while(!queue.isEmpty()){
p = queue.poll();
if(p != null){
queue.offer(p.left);
queue.offer(p.right);
}
else{
while(!queue.isEmpty()){
p = queue.poll();
if(p != null){
return false;
}
}
}
}
return true;
}
}