Rumah  >  Artikel  >  Java  >  Bagaimana untuk menggunakan pokok binari yang lengkap untuk mencipta timbunan akar yang besar dan timbunan akar yang kecil di Jawa

Bagaimana untuk menggunakan pokok binari yang lengkap untuk mencipta timbunan akar yang besar dan timbunan akar yang kecil di Jawa

WBOY
WBOYke hadapan
2023-04-24 22:46:061210semak imbas

Timbunan Akar Besar

Timbunan Akar Besar: Nilai setiap nod tidak lebih besar daripada nilai nod induknya

Analisis adalah seperti berikut:

Katakan longgokan data dibuat untuk set sedemikian {27,15,19,18,28,34,65,49,25,37}; >

Bagaimana untuk menggunakan pokok binari yang lengkap untuk mencipta timbunan akar yang besar dan timbunan akar yang kecil di Jawa

Bagaimana untuk menggunakan pokok binari yang lengkap untuk mencipta timbunan akar yang besar dan timbunan akar yang kecil di Jawa

Bagaimana untuk menggunakan pokok binari yang lengkap untuk mencipta timbunan akar yang besar dan timbunan akar yang kecil di Jawa

Bagaimana untuk menggunakan pokok binari yang lengkap untuk mencipta timbunan akar yang besar dan timbunan akar yang kecil di Jawa

Bagaimana untuk menggunakan pokok binari yang lengkap untuk mencipta timbunan akar yang besar dan timbunan akar yang kecil di Jawa

Bagaimana untuk menggunakan pokok binari yang lengkap untuk mencipta timbunan akar yang besar dan timbunan akar yang kecil di Jawa

Bagaimana untuk menggunakan pokok binari yang lengkap untuk mencipta timbunan akar yang besar dan timbunan akar yang kecil di Jawa

Kod adalah seperti berikut:

Bagaimana untuk menggunakan pokok binari yang lengkap untuk mencipta timbunan akar yang besar dan timbunan akar yang kecil di Jawa

Timbunan punca kecil

Timbunan punca kecil: nilai setiap nod tidak kurang daripada nilai nod induknya
//建立大根堆
public class TestHeap{
    public int[] array;
    public int usedSize;//当前有效数组长度
    public TestHeap(){
        this.array = new int[10];
        this.usedSize = 0;
    }
    //初始化数组
    public void InitArray(int[] arrayClone){
        array = Arrays.copyOf(arrayClone, arrayClone.length);
        usedSize = array.length;
    }
    //创建大根堆
    public void createHeap(){
        for(int parent = (usedSize - 1 - 1) / 2; parent >= 0; parent--){
            adjustment(parent, usedSize);
        }
    }
    //调整
    public void adjustment(int parent, int len){
        //左子树结点下标
        int child = parent * 2 + 1;
        //调整
        while(child < len){
            //先判断有没有右孩子,如果右,找出最大值
            if(child + 1 < len && array[child] < array[child + 1]){
                child++;//如果右子树大,child++就指向他,如果左子树大,就不用管,直接进行下一步判断交换
            }
            //若左右子树的最大值大于父亲结点则交换
            if(array[child] > array[parent]){
                swap(array, child, parent);
                parent = child;
                child = parent * 2 + 1;
            } else{
                break;
            }
        }
    }
    //交换
    public void swap(int[] array, int child, int parent){
        int tmp = array[child];
        array[child] = array[parent];
        array[parent] = tmp;
    }
}

Analisis adalah serupa dengan timbunan punca besar, kecuali yang lebih kecil dibandingkan dan digantikan

Kodnya adalah seperti berikut:

Atas ialah kandungan terperinci Bagaimana untuk menggunakan pokok binari yang lengkap untuk mencipta timbunan akar yang besar dan timbunan akar yang kecil di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam