这段代码是为了确定二叉树是否是最小堆,我NullPointerException
在公共静态布尔 isMinHeap 中的第三个 if 语句中不断得到一个,我不确定为什么我一直得到这个异常,因为我认为代码是有效的由于上述中断。
public class ArrayHeapChecker {
public static boolean isBinaryTree(Integer[] array) {
for (int i = 1; i < array.length; i++){
if (array[i] != null && array [(i-1)/ 2] == null) {
return false;
}
}
return true;
}
public static boolean isCompleteBinaryTree(Integer[] array) {
if(!isBinaryTree(array)) {
return false;
}
for (int i = 0; i < array.length - 1; i++) {
if ((i % 2 == 0) && array[i] == null && array[i + 1] != null) {
return false;
}
if ((i % 2 != 0) && array[i] == null && array[i + 1] != null) {
return false;
}
}
return true;
}
public static boolean isMinHeap(Integer[] array) {
if(!isCompleteBinaryTree(array)) {
return false;
}
for (int i = 0; i < array.length - 1; i++) {
if (array[i] == null) {
break;
}
if (array.length <= ((2*i) + 2)) {
break;
}
if (array[(i * 2) + 1] == null || array[(i * 2) + 2] == null) {
break;
}
if (array[i] > array[(i * 2) + 1] || array[i] > array[(i * 2) + 2]) {
return false;
}
}
return true;
}
}