-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathQuestionsHeap.java
More file actions
144 lines (112 loc) · 3.33 KB
/
Copy pathQuestionsHeap.java
File metadata and controls
144 lines (112 loc) · 3.33 KB
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
import visualizer.*;
import java.util.ArrayList;
public class QuestionsHeap {
public static void main(String args[]) {
Visualizer.Initialize("ttPjdw9eqh1tyHdJb22A8ULtzIvxTQA1");
// This enables the visualizer to visualize our defined Node<E> objects. If we make a new class object that we want to
// visualize, we need to add it here
String[] classes = { "HeapNode" };
Visualizer.addClassNamesToVisualizeValue(classes);
/* Question 19 */
// BEGIN PRIVATE CODE
// END PRIVATE CODE
/* Question 21 */
// BEGIN PRIVATE CODE
// END PRIVATE CODE
/* Question 22 */
// BEGIN PRIVATE CODE
// END PRIVATE CODE
/* Question 25 */
// BEGIN PRIVATE CODE
// END PRIVATE CODE
/* Question 28 */
// BEGIN PRIVATE CODE
// END PRIVATE CODE
}
}
final class MinHeap<E extends Comparable<E>> {
ArrayList<E> heap;
int size = 0;
MinHeap() {
heap = new ArrayList<>();
}
MinHeap(E[] a) {
heap = new ArrayList<>();
for (E e : a) {
heap.add(e);
}
size = a.length;
}
/* Question 24 */
public void add(E e) {
// BEGIN PRIVATE CODE
// END PRIVATE CODE
}
/* Question 23 */
private void siftUp(int i) {
// BEGIN PRIVATE CODE
// END PRIVATE CODE
}
/* Question 27 */
public E remove() {
// BEGIN PRIVATE CODE
return null;
// END PRIVATE CODE
}
/* Question 26 */
private void siftDown(int i) {
// BEGIN PRIVATE CODE
// END PRIVATE CODE
}
/* Question 22 */
/**
* Returns true iff the subtree of heap starting at index i is a min-heap.
* @param a an array representing a mostly-complete tree, possibly a heap
* @param i an index into that array representing a subtree rooted at i
* @return true iff the subtree of heap starting at index i is a min-heap
*/
public boolean isMinHeap(int i) {
// BEGIN PRIVATE CODE
return false;
// END PRIVATE CODE
}
private int parent(int i) {
return (i - 1) / 2;
}
private int left(int i) {
return 2 * i + 1;
}
private boolean hasLeft(int i) {
return left(i) < size;
}
private int right(int i) {
return 2 * i + 2;
}
private boolean hasRight(int i) {
return right(i) < size;
}
private void swap(int i, int j) {
E t = heap.get(i);
heap.set(i, heap.get(j));
heap.set(j, t);
}
public HeapNode<E> treeifyHeap() {
HeapNode<E> root = new HeapNode<>(heap.get(0));
connect(root, 0);
return root;
}
private void connect(HeapNode<E> parent, int parentIndex) {
int leftIndex = 2 * parentIndex + 1;
int rightIndex = 2 * parentIndex + 2;
if (leftIndex < size) {
HeapNode<E> left = new HeapNode<>(heap.get(leftIndex), parent);
parent.left = left;
connect(left, leftIndex);
}
if (rightIndex < size) {
HeapNode<E> right = new HeapNode<>(heap.get(rightIndex), parent);
parent.right = right;
connect(right, rightIndex);
}
}
}