Home  >  Article  >  Java  >  How to create a large root heap and a small root heap using a complete binary tree in Java

How to create a large root heap and a small root heap using a complete binary tree in Java

WBOY
WBOYforward
2023-04-24 22:46:061210browse

Big Root Heap

Big Root Heap: The value of each node is not greater than the value of its parent node

The analysis is as follows:

Suppose that a pile of data is created for such a set {27,15,19,18,28,34,65,49,25,37};

How to create a large root heap and a small root heap using a complete binary tree in Java

How to create a large root heap and a small root heap using a complete binary tree in Java

How to create a large root heap and a small root heap using a complete binary tree in Java

How to create a large root heap and a small root heap using a complete binary tree in Java

How to create a large root heap and a small root heap using a complete binary tree in Java

How to create a large root heap and a small root heap using a complete binary tree in Java

How to create a large root heap and a small root heap using a complete binary tree in Java

How to create a large root heap and a small root heap using a complete binary tree in Java

#The code is as follows:

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

Small root heap

Small root heap: The value of each node is not less than the value of its parent node

The analysis is similar to the big root heap, except that smaller ones are compared and replaced.

The code is as follows:

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

The above is the detailed content of How to create a large root heap and a small root heap using a complete binary tree in Java. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete