判断该二叉树是否为搜索二叉树和完全二叉树
题目描述
给定一棵二叉树,已经其中没有重复值的节点,请判断该二叉树是否为搜索二叉树和完全二叉树。
代码
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) {
return new boolean[]{searchT(root, null, null),perfectT(root)};
}
public boolean searchT(TreeNode root, TreeNode min, TreeNode max){
if(root == null) return true;
if(min!=null&&root.val<min.val) return false;
else if(max!=null&&root.val>max.val) return false;
else
return searchT(root.left, min, root)&&searchT(root.right, root, max);
}
public boolean perfectT(TreeNode root){
if(root==null) return true;
Queue<TreeNode> q = new LinkedList<>();
q.add(root);
boolean leaf = false;
while(!q.isEmpty()){
TreeNode t = q.poll();
TreeNode l = t.left;
TreeNode r = t.right;
if( ( //判断上一个队列中的值为叶子节点,若是则看之后的节点是否符合
leaf &&
(l!=null||r!=null)
)|| //左空有存不符合完全二叉树的规则
(l==null&&r!=null)
) return false;
if(l!=null) q.add(l);
if(r!=null) q.add(r);
else leaf = true;
}
return true;
}
}