A Min-Heap is a complete binary tree in which the value in each internal node is smaller than or equal to the values in the children of that node. Mapping the elements of a heap into an array is trivial: if a node is stored an index k, then its left child is stored at index 2k + 1 and its right child at index 2k + 2.
 
Min Heap in JavaScript
How is Min Heap represented?
Let us go through the representation of Min heap. So basically Min Heap is a complete binary tree. A Min heap is typically represented as an array. The root element will be at Arr[0]. For any ith node, i.e., Arr[i]
- Arr[(i -1) / 2] returns its parent node.
- Arr[(2 * i) + 1] returns its left child node.
- Arr[(2 * i) + 2] returns its right child node.
Operations of Heap Data Structure:
- Heapify: a process of creating a heap from an array.
- Insertion: process to insert an element in existing heap time complexity O(log N).
- Deletion: deleting the top element of the heap or the highest priority element, and then organizing the heap and returning the element with time complexity O(log N).
- Peek: to check or find the most prior element in the heap, (max or min element for max and min heap).
Explanation: Now let us understand how the various helper methods maintain the order of the heap
- The helper methods like rightChild, leftChild, and parent help us to get the element and its children at the specified index.
- The add() and remove() methods handle the insertion and deletion process
- The heapifyDown() method maintains the heap structure when an element is deleted.
- The heapifyUp() method maintains the heap structure when an element is added to the heap.
- The peek() method returns the root element of the heap and swap() method interchanges value at two nodes.
Example: In this example, we will implement the Min Heap data structure.
Javascript
| class MinHeap {    constructor() {        this.heap = [];    }    // Helper Methods    getLeftChildIndex(parentIndex) {        return2 * parentIndex + 1;    }    getRightChildIndex(parentIndex) {        return2 * parentIndex + 2;    }    getParentIndex(childIndex) {        returnMath.floor((childIndex - 1) / 2);    }    hasLeftChild(index) {        returnthis.getLeftChildIndex(index) < this.heap.length;    }    hasRightChild(index) {        returnthis.getRightChildIndex(index) < this.heap.length;    }    hasParent(index) {        returnthis.getParentIndex(index) >= 0;    }    leftChild(index) {        returnthis.heap[this.getLeftChildIndex(index)];    }    rightChild(index) {        returnthis.heap[this.getRightChildIndex(index)];    }    parent(index) {        returnthis.heap[this.getParentIndex(index)];    }    // Functions to create Min Heap        swap(indexOne, indexTwo) {        const temp = this.heap[indexOne];        this.heap[indexOne] = this.heap[indexTwo];        this.heap[indexTwo] = temp;    }    peek() {        if(this.heap.length === 0) {            returnnull;        }        returnthis.heap[0];    }        // Removing an element will remove the    // top element with highest priority then    // heapifyDown will be called     remove() {        if(this.heap.length === 0) {            returnnull;        }        const item = this.heap[0];        this.heap[0] = this.heap[this.heap.length - 1];        this.heap.pop();        this.heapifyDown();        returnitem;    }    add(item) {        this.heap.push(item);        this.heapifyUp();    }    heapifyUp() {        let index = this.heap.length - 1;        while(this.hasParent(index) && this.parent(index) > this.heap[index]) {            this.swap(this.getParentIndex(index), index);            index = this.getParentIndex(index);        }    }    heapifyDown() {        let index = 0;        while(this.hasLeftChild(index)) {            let smallerChildIndex = this.getLeftChildIndex(index);            if(this.hasRightChild(index) && this.rightChild(index) < this.leftChild(index)) {                smallerChildIndex = this.getRightChildIndex(index);            }            if(this.heap[index] < this.heap[smallerChildIndex]) {                break;            } else{                this.swap(index, smallerChildIndex);            }            index = smallerChildIndex;        }    }        printHeap() {        varheap =` ${this.heap[0]} `        for(vari = 1; i<this.heap.length;i++) {            heap += ` ${this.heap[i]} `;        }        console.log(heap);    }}// Creating the Heapvarheap = newMinHeap();// Adding The Elementsheap.add(10);heap.add(15);heap.add(30);heap.add(40);heap.add(50);heap.add(100);heap.add(40);// Printing the Heapheap.printHeap();// Peeking And Removing Top Elementconsole.log(heap.peek());console.log(heap.remove());// Printing the Heap// After Deletion.heap.printHeap(); | 
10 15 30 40 50 100 40 10 10 15 40 30 40 50 100
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!


 
                                    







