Maison  >  Article  >  Java  >  Comment utiliser un arbre binaire complet pour créer un grand tas racine et un petit tas racine en Java

Comment utiliser un arbre binaire complet pour créer un grand tas racine et un petit tas racine en Java

WBOY
WBOYavant
2023-04-24 22:46:061213parcourir

Big Root Heap

Big Root Heap : La valeur de chaque nœud n'est pas supérieure à la valeur de son nœud parent

L'analyse est la suivante :

Supposons que { 27,15,19,18,28, 34,65,49 ,25,37 } Une telle collecte de données crée des tas

Comment utiliser un arbre binaire complet pour créer un grand tas racine et un petit tas racine en Java

Comment utiliser un arbre binaire complet pour créer un grand tas racine et un petit tas racine en Java

Comment utiliser un arbre binaire complet pour créer un grand tas racine et un petit tas racine en Java

Comment utiliser un arbre binaire complet pour créer un grand tas racine et un petit tas racine en Java

Comment utiliser un arbre binaire complet pour créer un grand tas racine et un petit tas racine en Java

Comment utiliser un arbre binaire complet pour créer un grand tas racine et un petit tas racine en Java

Comment utiliser un arbre binaire complet pour créer un grand tas racine et un petit tas racine en Java

;

Comment utiliser un arbre binaire complet pour créer un grand tas racine et un petit tas racine en JavaLe code est le suivant :

//建立大根堆
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;
    }
}

Petit tas racine

Petit tas racine : La valeur de chaque nœud n'est pas inférieure à la valeur de son nœud parent

L'analyse est similaire au grand tas racine, sauf que le plus petit est comparé et remplacé

Le code est le suivant :

//建立大根堆
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;
    }
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer