NC60 判断一棵二叉树是否为搜索二叉树和完全二叉树
描述
给定一棵二叉树,已知其中的节点没有重复值,请判断该二叉树是否为搜索二叉树和完全二叉树。
示例1
输入:
{2,1,3}
复制
返回值:
[true,true]
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) {
// write code here
boolean[] res = new boolean[2];
res[0] = isBST(root);
res[1] = isCBT(root);
return res ;
}
public boolean isBST(TreeNode root){
boolean r = BSThelper(root , Long.MIN_VALUE , Long.MAX_VALUE) ;
return r;
}
public boolean BSThelper(TreeNode root , long max , long min){
if(root == null){
return true;
}
if(root.val <= max || root.val > min){
return false ;
}
return BSThelper(root.left , max , Math.min(root.val , min)) && BSThelper(root.right , Math.max(max , root.val) , min);
}
public boolean isCBT(TreeNode root){
if(root == null){
return false ;
}
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(root) ;
while(!queue.isEmpty()){
TreeNode node = queue.peek();
if(node.left != null && node.right != null){
queue.poll();
queue.offer(node.left);
queue.offer(node.right);
}
if(node.left == null && node.right != null){
return false ;
}
if((node.left != null && node.right == null) || (node.left == null && node.right == null)){
queue.poll();
while(!queue.isEmpty()){
node = queue.peek();
if(node.left == null && node.right == null){
queue.poll();
}else{
return false ;
}
}
}
}
return true ;
}
}