Rumah > Java > javaTutorial > teks badan

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

WBOY
Lepaskan: 2023-04-24 22:46:06
ke hadapan
1244 orang telah melayarinya

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;
    }
}
Salin selepas log masuk

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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan