我试图以最小堆的形式表示一个数组。我在其中一个叶节点中遇到问题,其中父节点大于(12 大于 6)右子节点。我不明白我的编码有什么问题,请帮忙。
这是我的代码:
public class MinHeap {
public void heapify(int Array[], int i){
int min;
int left=2*i;
int right= 2*i+1;
int length=Array.length;
if(left<length && Array[left]< Array[i] && Array[left]< Array[right])
min=left;
else if(right<length && Array[right]<Array[i] && Array[right]<Array[left])
min=right;
else min=i;
if(min!=i){
int temp=Array[i];
Array[i] = Array[min];
Array[min]=temp;
heapify(Array,min);
}
}
public void display(int Array[]){
for(int i=0; i<Array.length; i++)
System.out.print(Array[i]+" ");
}
public static void main(String[] args){
int Array[]={2,1,4,5,6,100,0,9,8,3,12,32,6,7,1000,999,20};
//int Array[]={1, 8, 9, 2, 10, 14, 3, 4, 7, 16};
int length=Array.length;
MinHeap object= new MinHeap();
System.out.println(length);
object.display(Array);
System.out.println();
for(int i=(length/2)-1;i>=0;i--){
object.heapify(Array,i);
}
System.out.println();
object.display(Array);
}
}
我得到的输出是:
0 1 3 2 4 12 5 9 8 6 100 32 6 7 1000 999 20