removing/deleting an element
import java.util.ArrayList;
public class DeletingInHeap {
static class Heap {
ArrayList<Integer> arr = new ArrayList<>();
public void add(int data) {
arr.add(data);
int x = arr.size() - 1;
int par = (x - 1) / 2;
while (arr.get(x) < arr.get(par)) {
int temp = arr.get(x);
arr.set(x, arr.get(par));
arr.set(par, temp);
x = par;
par = (x - 1) / 2;
}
}
public int peek() {
return arr.get(0);
}
public boolean isEmpty() {
return arr.size() == 0;
}
private void heapify(int i) {
int left = 2 * i + 1;
int right = 2 * i + 2;
int minIdx = i;
if (left < arr.size() && arr.get(minIdx) > arr.get(left)) {
minIdx = left;
}
if (right < arr.size() && arr.get(minIdx) > arr.get(right)) {
minIdx = right;
}
if (minIdx != i) { // ROOT IS NOT THE MIN ELEMENT
// SWAP
int temp = arr.get(i);
arr.set(i, arr.get(minIdx));
arr.set(minIdx, temp);
heapify(minIdx);
}
}
public int remove() {
int data = arr.get(0);
// STEP-1: SWAP 1st and LAST
int temp = arr.get(0);
arr.set(0, arr.get(arr.size() - 1));
arr.set(arr.size() - 1, temp);
// STEP-2: REMOVE
arr.remove(arr.size() - 1);
// STEP-3: HEAPIFY
heapify(0);
return data;
}
}
public static void main(String[] args) {
Heap h = new Heap();
h.add(2);
h.add(3);
h.add(5);
h.add(4);
h.add(10);
h.add(6);
while (!h.isEmpty()) {
System.out.print(h.peek() + " ");
h.remove();
}
}
}
Comments
Post a Comment