-
Notifications
You must be signed in to change notification settings - Fork 0
/
FibonacciHeapPrintable.java
98 lines (84 loc) · 2.89 KB
/
FibonacciHeapPrintable.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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import java.util.Arrays;
import java.util.Iterator;
/**
* FibonacciHeap
* <p>
* An implementation of fibonacci heap over non-negative integers.
*/
public class FibonacciHeapPrintable extends FibonacciHeap {
static final int LEVEL_SPACE = 1;
public String lastString;
public void updateString() {
StringBuilder stringB = new StringBuilder();
stringB.append(Arrays.toString(this.countersRep()))
.append(", Size: ")
.append(this.size());
if (!this.empty()) {
stringB.append(", min : ")
.append(this.findMin().getKey());
}
stringB.append(", TreesCount: ")
.append(this.treesCount())
.append(", Mark count: ")
.append(this.markedNodesCount)
.append(", potential: ")
.append(this.potential())
.append("\n");
this.lastString = stringB.toString() + toString();
}
public String toString() {
StringBuilder output = new StringBuilder();
if (empty()) {
return "<Empty Heap>";
}
Iterator<HeapNode> treesListIterator = this.getTreesListIterator();
while (treesListIterator.hasNext()) {
output
.append(printNode(treesListIterator.next(), 1))
.append("\n|\n")
;
}
output.append("#");
return output.toString();
}
public static String getSpace(int level) {
StringBuilder output = new StringBuilder();
for (int i = 0; i < (level * LEVEL_SPACE); i++) {
output.append("|");
output.append("\t");
}
return output.toString();
}
public static String printNode(HeapNode node, int level) {
StringBuilder output = new StringBuilder();
String space = getSpace(level);
// if (!node.isRoot()) {
// output.append("(");
// output.append(node.parent.key);
// output.append(")");
// }
output.append(node.key);
if (node.isMarked()) {
output.append("*");
}
output.append(" -> ");
if (node.isLeaf()) {
output.append("#");
} else {
Iterator<HeapNode> childIterator = node.getChildIterator();
while (childIterator.hasNext()) {
HeapNode childNode = childIterator.next();
output
.append("\n")
.append(space)
.append(printNode(childNode, level + 1))
;
}
output
.append("\n")
.append(space).append("|\n")
.append(space).append("#");
}
return output.toString();
}
}