题目描述
给定一棵二叉树,已经其中没有重复值的节点,请判断该二叉树是否为搜索二叉树和完全二叉树。
思路
判断搜索二叉树 :
创建一个全局变量保存当前结点的前一个结点,中序遍历二叉树判断当前结点的数值是否比前一个结点大。
也可以中序遍历数将遍历到的结点保存在一个集合中,检查是否递增。
判断完全二叉:
横向遍历树,当第一次遇到一个节点为空,则这个节点后面的节点也必须全部为空。
import java.util.*;
public class Solution {
public boolean[] judgeIt (TreeNode root) {
boolean[] res = new boolean[]{false,false};
if(root == null){
return res;
}
res[0] = search(root);
res[1] = complete(root);
return res;
}
Integer pre = Integer.MIN_VALUE;
public boolean search(TreeNode root){
if(root == null){
return true;
}
boolean a = search(root.left);
if(root.val <= pre){
return false;
}else{
pre = root.val;
}
boolean b = search(root.right);
return a && b;
}
public boolean complete(TreeNode root){
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
TreeNode temp = queue.poll();
if(temp == null){
while(!queue.isEmpty()){
TreeNode tn = queue.poll();
if(tn != null){
return false;
}
}
break;
}
queue.offer(temp.left);
queue.offer(temp.right);
}
return true;
}
}