-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMinHeap.java
executable file
·80 lines (67 loc) · 2.08 KB
/
MinHeap.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import java.util.ArrayList;
import java.util.List;
public class MinHeap {
private List<Integer> heap;
public MinHeap(){
heap = new ArrayList<>();
}
private int parent(int index){
return (index-1) /2;
}
private int leftChild(int index){
int left = index*2 + 1;
if(left < heap.size()){
return left;
}
return -1;
}
private int rightChild(int index){
int right = index*2 + 2;
if(right < heap.size()){
return right;
}
return -1;
}
public void insert(int number){
heap.add(number);
checkAndSwap(heap.size()-1);
}
private void checkAndSwap(int index){
int parentIndex = parent(index);
while(parentIndex >=0 && heap.get(index) < heap.get(parentIndex)){
swap(index, parentIndex);
index = parentIndex;
parentIndex = parent(index);
}
}
private void swap(int index1, int index2){
int num = heap.get(index1);
heap.set(index1, heap.get(index2));
heap.set(index2, num);
}
public void remove(int index){
swap(index, heap.size()-1);
heap.remove(heap.size()-1);
while((leftChild(index)!= -1 && heap.get(index) > heap.get(leftChild(index))) ||
(rightChild(index)!=-1 && heap.get(index) > heap.get(rightChild(index)))){
int smallerIndex = rightChild(index) != - 1 && heap.get(leftChild(index)) < heap.get(rightChild(index))
? leftChild(index) : rightChild(index);
swap(index, smallerIndex);
index = smallerIndex;
}
}
public String toString(){
return heap.toString();
}
public static void main(String[] args) {
MinHeap minHeap = new MinHeap();
minHeap.insert(10);
minHeap.insert(7);
minHeap.insert(9);
System.out.println(minHeap);
minHeap.insert(5);
System.out.println(minHeap);
minHeap.remove(2);
System.out.println(minHeap);
}
}