微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么通过推送创建 java min 堆失败?

如何解决为什么通过推送创建 java min 堆失败?

我正在实现一个最小二元堆 当我使用数组构建它时,它工作正常 但是当我使用 push 填充它时,我得到了它作为输出,所以有什么问题!?

&&& [0,9]

父:0,左:0,右:0 父:0,左:0,右:0 父:0,左:0,右:9

代码如下

    public MinHeapByArray(int []arr) {
        arrSize = arr.length;
        heap = new int[arrSize];
        heap = arr;
        
    }
    
    public MinHeapByArray(int n) {
        arrSize = n;
        heap = new int[arrSize];
    }
public static void main(String[] args) {
        
        int[] arr = {3,13,7,16,21,12,9};
        MinHeapByArray MinHeapByArray = new MinHeapByArray(7);


        for (int i = 0; i < arr.length ; i++) {
            System.out.println(arr[i]);
            MinHeapByArray.push(arr[i]);
        }

        MinHeapByArray.printHeap(); 
    }

    public MinHeapByArray_Tasneem(int n) {
        arrSize = n;
        heap = new int[arrSize];
    }

    public  void push(int value) {
        heap[arrSize-1] = value;
        heapifyUp(arrSize-1);
    }

    public  void heapifyUp(int i) {
        if (i == 0) 
            return;
        
        int ip =getParentIndex(i);
        
        if (heap[i] < heap[ip]) {
            swap(i,ip);
            heapifyUp(ip);
        }

    }

public  void heapifyDown(int i) {
        // Todo Auto-generated method stub
        if (isLeaf(i))
            return;
        
        int iL = getLeftChildindex(i);
        int ir = getRightChildindex(i);
        
        int minChildindex;
        
        if (heap[iL] < heap[ir])
            minChildindex = iL;
        else
            minChildindex = ir;
        
        if (heap[i] < heap[minChildindex]) 
            return;
                    
        swap(i,minChildindex);
        heapifyDown(minChildindex);
        
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。