我正在尝试概述一种算法,以确定我的数组是否是最小堆。那里有什么文件可以帮我解决这个问题吗?我在Apache的网站上找到了一个函数,但它没有准确显示该函数的工作原理;只是存在一个函数(BinaryHeap(boolean isMinHeap))。
答案 0 :(得分:1)
The Wikipedia article可以帮到你。
以下是一些让您考虑解决方案的问题:
答案 1 :(得分:1)
我认为这会奏效!
bool checkminheap(int arr[],root)
{
if(root>=sizeof(arr)/sizeof(arr[0])-1)
return 1;
if(arr[root]>arr[2*root] || arr[root]>arr[2*root+1]) //check root is the smallest element
return 0;
if(!checkminheap(arr,2*root))//check leftsubtree
return 0;
if(!checkminheap(arr,2*root+1))//check rightsubtree
return 0;
return 1;
}
答案 2 :(得分:1)
使用java泛型支持添加详细解决方案,相对容易理解。
public static <T extends Comparable<T>> boolean isMinHeap(T arr[], int rootIndex) {
boolean isMaxH = true;
int lChild = 2 * rootIndex + 1;
int rChild = 2 * rootIndex + 2;
// Nothing to compare here, as lChild itself is larger then arr length.
if (lChild >= arr.length) {
return true;
}
if (arr[rootIndex].compareTo(arr[lChild]) > 0) {
return false;
} else {
isMaxH = isMaxH && isMinHeap(arr, lChild);
}
// rChild comparison not needed, return the current state of this root.
if (rChild >= arr.length) {
return isMaxH;
}
if (arr[rootIndex].compareTo(arr[rChild]) > 0) {
return false;
} else {
isMaxH = isMaxH && isMinHeap(arr, rChild);
}
return isMaxH;
}