思路:
判断搜索二叉树:递归。递归函数返回是否是搜索二叉树;递归函数内部需要完成左子树、根、右子树的大小对比。
判断完全二叉树:算法摘自百度百科。
代码:
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
return new boolean[]{isSearch(root), isComplete(root)};
}
public boolean isSearch(TreeNode root) {
if (root == null || (root.left == null && root.right == null)) {
return true;
}
if (root.left != null && root.left.val > root.val) {
return false;
}
if (root.right != null && root.right.val < root.val) {
return false;
}
return isSearch(root.left) && isSearch(root.right);
}
public boolean isComplete(TreeNode root) {
if (root == null) {
return false;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
if (node.left != null && node.right != null) {
queue.offer(node.left);
queue.offer(node.right);
}
else if (node.left == null && node.right != null) {
return false;
}
else {
while (!queue.isEmpty()) {
TreeNode leaf = queue.poll();
if (!(leaf.left == null && leaf.right == null)) {
return false;
}
}
return true;
}
}
return true;
}
}