Heim > Java > javaLernprogramm > Hauptteil

So erstellen Sie mit einem vollständigen Binärbaum einen großen Root-Heap und einen kleinen Root-Heap in Java

WBOY
Freigeben: 2023-04-24 22:46:06
nach vorne
1244 Leute haben es durchsucht

Großer Root-Heap

Großer Root-Heap: Der Wert jedes Knotens ist nicht größer als der Wert seines übergeordneten Knotens

Die Analyse lautet wie folgt:

Angenommen, dass { 27,15,19,18,28, 34,65,49 ,25,37 } Eine solche Datensammlung erzeugt Haufen

So erstellen Sie mit einem vollständigen Binärbaum einen großen Root-Heap und einen kleinen Root-Heap in Java

So erstellen Sie mit einem vollständigen Binärbaum einen großen Root-Heap und einen kleinen Root-Heap in Java

So erstellen Sie mit einem vollständigen Binärbaum einen großen Root-Heap und einen kleinen Root-Heap in Java

So erstellen Sie mit einem vollständigen Binärbaum einen großen Root-Heap und einen kleinen Root-Heap in Java

So erstellen Sie mit einem vollständigen Binärbaum einen großen Root-Heap und einen kleinen Root-Heap in Java

So erstellen Sie mit einem vollständigen Binärbaum einen großen Root-Heap und einen kleinen Root-Heap in Java

So erstellen Sie mit einem vollständigen Binärbaum einen großen Root-Heap und einen kleinen Root-Heap in Java

So erstellen Sie mit einem vollständigen Binärbaum einen großen Root-Heap und einen kleinen Root-Heap in Java

Der Code lautet wie folgt:

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

Kleiner Root-Heap

Kleiner Root-Heap: Der Wert jedes Knotens ist nicht kleiner als der Wert seines übergeordneten Knotens

Die Analyse ähnelt dem großen Root-Heap, außer dass der kleinere verglichen und ersetzt wird

Der Code lautet wie folgt:

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

Das obige ist der detaillierte Inhalt vonSo erstellen Sie mit einem vollständigen Binärbaum einen großen Root-Heap und einen kleinen Root-Heap in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage