data-structure-typed 1.41.6 → 1.41.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/README.md +14 -11
- package/benchmark/report.html +14 -11
- package/benchmark/report.json +153 -202
- package/dist/cjs/src/data-structures/binary-tree/rb-tree.d.ts +5 -2
- package/dist/cjs/src/data-structures/binary-tree/rb-tree.js +15 -2
- package/dist/cjs/src/data-structures/binary-tree/rb-tree.js.map +1 -1
- package/dist/cjs/src/data-structures/graph/abstract-graph.js +5 -5
- package/dist/cjs/src/data-structures/graph/abstract-graph.js.map +1 -1
- package/dist/mjs/src/data-structures/binary-tree/rb-tree.d.ts +5 -2
- package/dist/mjs/src/data-structures/binary-tree/rb-tree.js +15 -2
- package/dist/mjs/src/data-structures/graph/abstract-graph.js +5 -5
- package/dist/umd/data-structure-typed.min.js +1 -1
- package/dist/umd/data-structure-typed.min.js.map +1 -1
- package/package.json +5 -5
- package/src/data-structures/binary-tree/binary-tree.ts +1 -1
- package/src/data-structures/binary-tree/bst.ts +1 -1
- package/src/data-structures/binary-tree/rb-tree.ts +18 -2
- package/src/data-structures/graph/abstract-graph.ts +6 -6
- package/test/config.ts +1 -0
- package/test/integration/avl-tree.test.ts +110 -0
- package/test/integration/bst.test.ts +385 -0
- package/test/integration/heap.test.js +16 -0
- package/test/integration/index.html +51 -0
- package/test/performance/data-structures/binary-tree/avl-tree.test.ts +36 -0
- package/test/performance/data-structures/binary-tree/binary-index-tree.test.ts +0 -0
- package/test/performance/data-structures/binary-tree/binary-tree.test.ts +45 -0
- package/test/performance/data-structures/binary-tree/bst.test.ts +36 -0
- package/test/performance/data-structures/binary-tree/overall.test.ts +0 -0
- package/test/performance/data-structures/binary-tree/rb-tree.test.ts +32 -0
- package/test/performance/data-structures/binary-tree/segment-tree.test.ts +0 -0
- package/test/performance/data-structures/binary-tree/tree-multiset.test.ts +0 -0
- package/test/performance/data-structures/graph/abstract-graph.test.ts +0 -0
- package/test/performance/data-structures/graph/directed-graph.test.ts +49 -0
- package/test/performance/data-structures/graph/map-graph.test.ts +0 -0
- package/test/performance/data-structures/graph/overall.test.ts +0 -0
- package/test/performance/data-structures/graph/undirected-graph.test.ts +0 -0
- package/test/performance/data-structures/hash/coordinate-map.test.ts +0 -0
- package/test/performance/data-structures/hash/coordinate-set.test.ts +0 -0
- package/test/performance/data-structures/hash/hash-map.test.ts +0 -0
- package/test/performance/data-structures/hash/hash-table.test.ts +0 -0
- package/test/performance/data-structures/heap/heap.test.ts +30 -0
- package/test/performance/data-structures/heap/max-heap.test.ts +0 -0
- package/test/performance/data-structures/heap/min-heap.test.ts +0 -0
- package/test/performance/data-structures/linked-list/doubly-linked-list.test.ts +40 -0
- package/test/performance/data-structures/linked-list/linked-list.test.ts +0 -0
- package/test/performance/data-structures/linked-list/singly-linked-list.test.ts +34 -0
- package/test/performance/data-structures/linked-list/skip-linked-list.test.ts +0 -0
- package/test/performance/data-structures/linked-list/skip-list.test.ts +0 -0
- package/test/performance/data-structures/matrix/matrix.test.ts +0 -0
- package/test/performance/data-structures/matrix/matrix2d.test.ts +0 -0
- package/test/performance/data-structures/matrix/navigator.test.ts +0 -0
- package/test/performance/data-structures/matrix/vector2d.test.ts +0 -0
- package/test/performance/data-structures/priority-queue/max-priority-queue.test.ts +19 -0
- package/test/performance/data-structures/priority-queue/min-priority-queue.test.ts +0 -0
- package/test/performance/data-structures/priority-queue/priority-queue.test.ts +0 -0
- package/test/performance/data-structures/queue/deque.test.ts +21 -0
- package/test/performance/data-structures/queue/queue.test.ts +25 -0
- package/test/performance/data-structures/stack/stack.test.ts +0 -0
- package/test/performance/data-structures/tree/tree.test.ts +0 -0
- package/test/performance/data-structures/trie/trie.test.ts +22 -0
- package/test/performance/reportor.ts +185 -0
- package/test/performance/types/index.ts +1 -0
- package/test/performance/types/reportor.ts +3 -0
- package/test/types/index.ts +1 -0
- package/test/types/utils/big-o.ts +1 -0
- package/test/types/utils/index.ts +2 -0
- package/test/types/utils/json2html.ts +1 -0
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +269 -0
- package/test/unit/data-structures/binary-tree/binary-index-tree.test.ts +320 -0
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +486 -0
- package/test/unit/data-structures/binary-tree/bst.test.ts +840 -0
- package/test/unit/data-structures/binary-tree/overall.test.ts +66 -0
- package/test/unit/data-structures/binary-tree/rb-tree.test.ts +435 -0
- package/test/unit/data-structures/binary-tree/segment-tree.test.ts +50 -0
- package/test/unit/data-structures/binary-tree/tree-multiset.test.ts +542 -0
- package/test/unit/data-structures/graph/abstract-graph.test.ts +100 -0
- package/test/unit/data-structures/graph/directed-graph.test.ts +564 -0
- package/test/unit/data-structures/graph/map-graph.test.ts +126 -0
- package/test/unit/data-structures/graph/overall.test.ts +49 -0
- package/test/unit/data-structures/graph/salty-edges.json +1 -0
- package/test/unit/data-structures/graph/salty-vertexes.json +1 -0
- package/test/unit/data-structures/graph/undirected-graph.test.ts +167 -0
- package/test/unit/data-structures/hash/coordinate-map.test.ts +74 -0
- package/test/unit/data-structures/hash/coordinate-set.test.ts +66 -0
- package/test/unit/data-structures/hash/hash-map.test.ts +103 -0
- package/test/unit/data-structures/hash/hash-table.test.ts +186 -0
- package/test/unit/data-structures/heap/heap.test.ts +254 -0
- package/test/unit/data-structures/heap/max-heap.test.ts +52 -0
- package/test/unit/data-structures/heap/min-heap.test.ts +52 -0
- package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +400 -0
- package/test/unit/data-structures/linked-list/linked-list.test.ts +8 -0
- package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +474 -0
- package/test/unit/data-structures/linked-list/skip-linked-list.test.ts +13 -0
- package/test/unit/data-structures/linked-list/skip-list.test.ts +86 -0
- package/test/unit/data-structures/matrix/matrix.test.ts +54 -0
- package/test/unit/data-structures/matrix/matrix2d.test.ts +345 -0
- package/test/unit/data-structures/matrix/navigator.test.ts +244 -0
- package/test/unit/data-structures/matrix/vector2d.test.ts +171 -0
- package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +73 -0
- package/test/unit/data-structures/priority-queue/min-priority-queue.test.ts +63 -0
- package/test/unit/data-structures/priority-queue/priority-queue.test.ts +53 -0
- package/test/unit/data-structures/queue/deque.test.ts +410 -0
- package/test/unit/data-structures/queue/queue.test.ts +207 -0
- package/test/unit/data-structures/stack/stack.test.ts +67 -0
- package/test/unit/data-structures/tree/tree.test.ts +39 -0
- package/test/unit/data-structures/trie/trie.test.ts +825 -0
- package/test/utils/array.ts +5514 -0
- package/test/utils/big-o.ts +207 -0
- package/test/utils/console.ts +31 -0
- package/test/utils/index.ts +7 -0
- package/test/utils/is.ts +56 -0
- package/test/utils/json2html.ts +322 -0
- package/test/utils/number.ts +13 -0
- package/test/utils/string.ts +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "data-structure-typed",
|
|
3
|
-
"version": "1.41.
|
|
3
|
+
"version": "1.41.8",
|
|
4
4
|
"description": "Data Structures of Javascript & TypeScript. Binary Tree, BST, Graph, Heap, Priority Queue, Linked List, Queue, Deque, Stack, AVL Tree, Tree Multiset, Trie, Directed Graph, Undirected Graph, Singly Linked List, Doubly Linked List, Max Heap, Max Priority Queue, Min Heap, Min Priority Queue.",
|
|
5
5
|
"main": "dist/cjs/src/index.js",
|
|
6
6
|
"module": "dist/mjs/src/index.js",
|
|
@@ -64,10 +64,10 @@
|
|
|
64
64
|
"@typescript-eslint/eslint-plugin": "^6.7.4",
|
|
65
65
|
"@typescript-eslint/parser": "^6.7.4",
|
|
66
66
|
"auto-changelog": "^2.4.0",
|
|
67
|
-
"avl-tree-typed": "^1.41.
|
|
67
|
+
"avl-tree-typed": "^1.41.6",
|
|
68
68
|
"benchmark": "^2.1.4",
|
|
69
|
-
"binary-tree-typed": "^1.41.
|
|
70
|
-
"bst-typed": "^1.41.
|
|
69
|
+
"binary-tree-typed": "^1.41.6",
|
|
70
|
+
"bst-typed": "^1.41.6",
|
|
71
71
|
"dependency-cruiser": "^14.1.0",
|
|
72
72
|
"eslint": "^8.50.0",
|
|
73
73
|
"eslint-config-prettier": "^9.0.0",
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
"eslint-import-resolver-typescript": "^3.6.1",
|
|
76
76
|
"eslint-plugin-import": "^2.28.1",
|
|
77
77
|
"fast-glob": "^3.3.1",
|
|
78
|
-
"heap-typed": "^1.41.
|
|
78
|
+
"heap-typed": "^1.41.6",
|
|
79
79
|
"istanbul-badges-readme": "^1.8.5",
|
|
80
80
|
"jest": "^29.7.0",
|
|
81
81
|
"prettier": "^3.0.3",
|
|
@@ -142,7 +142,7 @@ export class BinaryTree<V = any, N extends BinaryTreeNode<V, N> = BinaryTreeNode
|
|
|
142
142
|
}
|
|
143
143
|
|
|
144
144
|
protected defaultOneParamCallback = (node: N) => node.key;
|
|
145
|
-
|
|
145
|
+
|
|
146
146
|
/**
|
|
147
147
|
* Creates a new instance of BinaryTreeNode with the given key and value.
|
|
148
148
|
* @param {BTNKey} key - The key for the new node.
|
|
@@ -36,7 +36,7 @@ export class BST<V = any, N extends BSTNode<V, N> = BSTNode<V, BSTNodeNested<V>>
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
-
|
|
39
|
+
|
|
40
40
|
/**
|
|
41
41
|
* The function creates a new binary search tree node with the given key and value.
|
|
42
42
|
* @param {BTNKey} key - The key parameter is the key value that will be associated with
|
|
@@ -44,6 +44,12 @@ export class RedBlackTree {
|
|
|
44
44
|
return this._root;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
protected _size: number = 0;
|
|
48
|
+
|
|
49
|
+
get size(): number {
|
|
50
|
+
return this._size;
|
|
51
|
+
}
|
|
52
|
+
|
|
47
53
|
/**
|
|
48
54
|
* The `insert` function inserts a new node with a given key into a red-black tree and fixes any
|
|
49
55
|
* violations of the red-black tree properties.
|
|
@@ -51,7 +57,7 @@ export class RedBlackTree {
|
|
|
51
57
|
* the RBTree.
|
|
52
58
|
* @returns The function does not explicitly return anything.
|
|
53
59
|
*/
|
|
54
|
-
|
|
60
|
+
add(key: number): void {
|
|
55
61
|
const node: RBTreeNode = new RBTreeNode(key, RBTNColor.RED);
|
|
56
62
|
node.left = NIL;
|
|
57
63
|
node.right = NIL;
|
|
@@ -79,20 +85,23 @@ export class RedBlackTree {
|
|
|
79
85
|
|
|
80
86
|
if (node.parent === null) {
|
|
81
87
|
node.color = RBTNColor.BLACK;
|
|
88
|
+
this._size++;
|
|
82
89
|
return;
|
|
83
90
|
}
|
|
84
91
|
|
|
85
92
|
if (node.parent.parent === null) {
|
|
93
|
+
this._size++;
|
|
86
94
|
return;
|
|
87
95
|
}
|
|
88
96
|
|
|
89
97
|
this._fixInsert(node);
|
|
98
|
+
this._size++;
|
|
90
99
|
}
|
|
91
100
|
|
|
92
101
|
/**
|
|
93
102
|
* The `delete` function in TypeScript is used to remove a node with a specific key from a red-black
|
|
94
103
|
* tree.
|
|
95
|
-
* @param {
|
|
104
|
+
* @param {number} key - The `node` parameter is of type `RBTreeNode` and represents the current
|
|
96
105
|
* node being processed in the delete operation.
|
|
97
106
|
* @returns The `delete` function does not return anything. It has a return type of `void`.
|
|
98
107
|
*/
|
|
@@ -113,6 +122,7 @@ export class RedBlackTree {
|
|
|
113
122
|
}
|
|
114
123
|
|
|
115
124
|
if (z === NIL) {
|
|
125
|
+
this._size--;
|
|
116
126
|
return;
|
|
117
127
|
}
|
|
118
128
|
|
|
@@ -144,6 +154,7 @@ export class RedBlackTree {
|
|
|
144
154
|
if (yOriginalColor === RBTNColor.BLACK) {
|
|
145
155
|
this._fixDelete(x);
|
|
146
156
|
}
|
|
157
|
+
this._size--;
|
|
147
158
|
};
|
|
148
159
|
helper(this.root);
|
|
149
160
|
}
|
|
@@ -241,6 +252,11 @@ export class RedBlackTree {
|
|
|
241
252
|
return y;
|
|
242
253
|
}
|
|
243
254
|
|
|
255
|
+
clear() {
|
|
256
|
+
this._root = NIL;
|
|
257
|
+
this._size = 0;
|
|
258
|
+
}
|
|
259
|
+
|
|
244
260
|
print(beginRoot: RBTreeNode = this.root) {
|
|
245
261
|
const display = (root: RBTreeNode | null): void => {
|
|
246
262
|
const [lines, , ,] = _displayAux(root);
|
|
@@ -233,8 +233,8 @@ export abstract class AbstractGraph<
|
|
|
233
233
|
return [];
|
|
234
234
|
}
|
|
235
235
|
|
|
236
|
-
const dfs = (cur: VO, dest: VO, visiting:
|
|
237
|
-
visiting.
|
|
236
|
+
const dfs = (cur: VO, dest: VO, visiting: Set<VO>, path: VO[]) => {
|
|
237
|
+
visiting.add(cur);
|
|
238
238
|
|
|
239
239
|
if (cur === dest) {
|
|
240
240
|
paths.push([vertex1, ...path]);
|
|
@@ -242,17 +242,17 @@ export abstract class AbstractGraph<
|
|
|
242
242
|
|
|
243
243
|
const neighbors = this.getNeighbors(cur);
|
|
244
244
|
for (const neighbor of neighbors) {
|
|
245
|
-
if (!visiting.
|
|
245
|
+
if (!visiting.has(neighbor)) {
|
|
246
246
|
path.push(neighbor);
|
|
247
247
|
dfs(neighbor, dest, visiting, path);
|
|
248
|
-
|
|
248
|
+
path.pop();
|
|
249
249
|
}
|
|
250
250
|
}
|
|
251
251
|
|
|
252
|
-
visiting.
|
|
252
|
+
visiting.delete(cur);
|
|
253
253
|
};
|
|
254
254
|
|
|
255
|
-
dfs(vertex1, vertex2, new
|
|
255
|
+
dfs(vertex1, vertex2, new Set<VO>(), []);
|
|
256
256
|
return paths;
|
|
257
257
|
}
|
|
258
258
|
|
package/test/config.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const isDebugTest = false;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import {AVLTree, CP} from 'avl-tree-typed';
|
|
2
|
+
|
|
3
|
+
describe('AVL Tree Test', () => {
|
|
4
|
+
it('should perform various operations on a AVL Tree', () => {
|
|
5
|
+
const arr = [11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];
|
|
6
|
+
const tree = new AVLTree();
|
|
7
|
+
|
|
8
|
+
for (const i of arr) tree.add(i, i);
|
|
9
|
+
|
|
10
|
+
const node6 = tree.get(6);
|
|
11
|
+
|
|
12
|
+
expect(node6 && tree.getHeight(node6)).toBe(3);
|
|
13
|
+
expect(node6 && tree.getDepth(node6)).toBe(1);
|
|
14
|
+
|
|
15
|
+
const getValueById = tree.get(10);
|
|
16
|
+
expect(getValueById).toBe(10);
|
|
17
|
+
|
|
18
|
+
const getMinNodeByRoot = tree.getLeftMost();
|
|
19
|
+
expect(getMinNodeByRoot?.key).toBe(1);
|
|
20
|
+
|
|
21
|
+
const node15 = tree.getNode(15);
|
|
22
|
+
const getMinNodeBySpecificNode = node15 && tree.getLeftMost(node15);
|
|
23
|
+
expect(getMinNodeBySpecificNode?.key).toBe(12);
|
|
24
|
+
|
|
25
|
+
let subTreeSum = 0;
|
|
26
|
+
node15 && tree.subTreeTraverse(node => (subTreeSum += node.key), 15);
|
|
27
|
+
expect(subTreeSum).toBe(70);
|
|
28
|
+
|
|
29
|
+
let lesserSum = 0;
|
|
30
|
+
tree.lesserOrGreaterTraverse(node => (lesserSum += node.key), CP.lt, 10);
|
|
31
|
+
expect(lesserSum).toBe(45);
|
|
32
|
+
|
|
33
|
+
// node15 has type problem. After the uniform design, the generics of containers (DirectedGraph, BST) are based on the type of value. However, this design has a drawback: when I attempt to inherit from the Vertex or BSTNode classes, the types of the results obtained by all methods are those of the parent class.
|
|
34
|
+
expect(node15?.value).toBe(15);
|
|
35
|
+
|
|
36
|
+
const dfs = tree.dfs(node => node, 'in');
|
|
37
|
+
expect(dfs[0].key).toBe(1);
|
|
38
|
+
expect(dfs[dfs.length - 1].key).toBe(16);
|
|
39
|
+
|
|
40
|
+
tree.perfectlyBalance();
|
|
41
|
+
const bfs = tree.bfs(node => node);
|
|
42
|
+
expect(tree.isPerfectlyBalanced()).toBe(true);
|
|
43
|
+
expect(bfs[0].key).toBe(8);
|
|
44
|
+
expect(bfs[bfs.length - 1].key).toBe(16);
|
|
45
|
+
|
|
46
|
+
expect(tree.delete(11)[0].deleted?.key).toBe(11);
|
|
47
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
48
|
+
expect(node15 && tree.getHeight(node15)).toBe(2);
|
|
49
|
+
|
|
50
|
+
expect(tree.delete(1)[0].deleted?.key).toBe(1);
|
|
51
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
52
|
+
expect(tree.getHeight()).toBe(4);
|
|
53
|
+
|
|
54
|
+
expect(tree.delete(4)[0].deleted?.key).toBe(4);
|
|
55
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
56
|
+
expect(tree.getHeight()).toBe(4);
|
|
57
|
+
|
|
58
|
+
expect(tree.delete(10)[0].deleted?.key).toBe(10);
|
|
59
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
60
|
+
expect(tree.getHeight()).toBe(3);
|
|
61
|
+
|
|
62
|
+
expect(tree.delete(15)[0].deleted?.key).toBe(15);
|
|
63
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
64
|
+
|
|
65
|
+
expect(tree.getHeight()).toBe(3);
|
|
66
|
+
|
|
67
|
+
expect(tree.delete(5)[0].deleted?.key).toBe(5);
|
|
68
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
69
|
+
expect(tree.getHeight()).toBe(3);
|
|
70
|
+
|
|
71
|
+
expect(tree.delete(13)[0].deleted?.key).toBe(13);
|
|
72
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
73
|
+
expect(tree.getHeight()).toBe(3);
|
|
74
|
+
|
|
75
|
+
expect(tree.delete(3)[0].deleted?.key).toBe(3);
|
|
76
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
77
|
+
expect(tree.getHeight()).toBe(3);
|
|
78
|
+
|
|
79
|
+
expect(tree.delete(8)[0].deleted?.key).toBe(8);
|
|
80
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
81
|
+
expect(tree.getHeight()).toBe(3);
|
|
82
|
+
|
|
83
|
+
expect(tree.delete(6)[0].deleted?.key).toBe(6);
|
|
84
|
+
expect(tree.delete(6).length).toBe(0);
|
|
85
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
86
|
+
expect(tree.getHeight()).toBe(2);
|
|
87
|
+
|
|
88
|
+
expect(tree.delete(7)[0].deleted?.key).toBe(7);
|
|
89
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
90
|
+
expect(tree.getHeight()).toBe(2);
|
|
91
|
+
|
|
92
|
+
expect(tree.delete(9)[0].deleted?.key).toBe(9);
|
|
93
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
94
|
+
expect(tree.getHeight()).toBe(2);
|
|
95
|
+
expect(tree.delete(14)[0].deleted?.key).toBe(14);
|
|
96
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
97
|
+
expect(tree.getHeight()).toBe(1);
|
|
98
|
+
|
|
99
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
100
|
+
const lastBFSIds = tree.bfs();
|
|
101
|
+
expect(lastBFSIds[0]).toBe(12);
|
|
102
|
+
expect(lastBFSIds[1]).toBe(2);
|
|
103
|
+
expect(lastBFSIds[2]).toBe(16);
|
|
104
|
+
|
|
105
|
+
const lastBFSNodes = tree.bfs(node => node);
|
|
106
|
+
expect(lastBFSNodes[0].key).toBe(12);
|
|
107
|
+
expect(lastBFSNodes[1].key).toBe(2);
|
|
108
|
+
expect(lastBFSNodes[2].key).toBe(16);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
import {BST, BSTNode, CP} from 'bst-typed';
|
|
2
|
+
|
|
3
|
+
describe('Individual package BST operations test', () => {
|
|
4
|
+
it('should perform various operations on a Binary Search Tree with numeric values', () => {
|
|
5
|
+
const bst = new BST();
|
|
6
|
+
expect(bst).toBeInstanceOf(BST);
|
|
7
|
+
bst.add(11, 11);
|
|
8
|
+
bst.add(3, 3);
|
|
9
|
+
const idsOrValues = [15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];
|
|
10
|
+
bst.addMany(idsOrValues, idsOrValues, false);
|
|
11
|
+
expect(bst.root).toBeInstanceOf(BSTNode);
|
|
12
|
+
|
|
13
|
+
if (bst.root) expect(bst.root.key).toBe(11);
|
|
14
|
+
|
|
15
|
+
expect(bst.size).toBe(16);
|
|
16
|
+
|
|
17
|
+
expect(bst.has(6)).toBe(true);
|
|
18
|
+
|
|
19
|
+
const node6 = bst.get(6);
|
|
20
|
+
expect(node6 && bst.getHeight(6)).toBe(2);
|
|
21
|
+
expect(node6 && bst.getDepth(6)).toBe(3);
|
|
22
|
+
|
|
23
|
+
const nodeId10 = bst.getNode(10);
|
|
24
|
+
expect(nodeId10?.key).toBe(10);
|
|
25
|
+
|
|
26
|
+
const nodeVal9 = bst.getNode(9, node => node.value);
|
|
27
|
+
expect(nodeVal9?.key).toBe(9);
|
|
28
|
+
|
|
29
|
+
const leftMost = bst.getLeftMost();
|
|
30
|
+
expect(leftMost?.key).toBe(1);
|
|
31
|
+
|
|
32
|
+
const node15 = bst.getNode(15);
|
|
33
|
+
const minNodeBySpecificNode = node15 && bst.getLeftMost(node15);
|
|
34
|
+
expect(minNodeBySpecificNode?.key).toBe(12);
|
|
35
|
+
|
|
36
|
+
let subTreeSum = 0;
|
|
37
|
+
node15 && bst.subTreeTraverse(node => (subTreeSum += node.key), 15);
|
|
38
|
+
expect(subTreeSum).toBe(70);
|
|
39
|
+
|
|
40
|
+
let lesserSum = 0;
|
|
41
|
+
bst.lesserOrGreaterTraverse(node => (lesserSum += node.key), CP.lt, 10);
|
|
42
|
+
expect(lesserSum).toBe(45);
|
|
43
|
+
|
|
44
|
+
expect(node15).toBeInstanceOf(BSTNode);
|
|
45
|
+
|
|
46
|
+
const node11 = bst.getNode(11);
|
|
47
|
+
expect(node11).toBeInstanceOf(BSTNode);
|
|
48
|
+
|
|
49
|
+
const dfsInorderNodes = bst.dfs(node => node, 'in');
|
|
50
|
+
expect(dfsInorderNodes[0].key).toBe(1);
|
|
51
|
+
expect(dfsInorderNodes[dfsInorderNodes.length - 1].key).toBe(16);
|
|
52
|
+
|
|
53
|
+
bst.perfectlyBalance();
|
|
54
|
+
expect(bst.isPerfectlyBalanced()).toBe(true);
|
|
55
|
+
|
|
56
|
+
const bfsNodesAfterBalanced = bst.bfs(node => node);
|
|
57
|
+
expect(bfsNodesAfterBalanced[0].key).toBe(8);
|
|
58
|
+
expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16);
|
|
59
|
+
|
|
60
|
+
const removed11 = bst.delete(11);
|
|
61
|
+
expect(removed11).toBeInstanceOf(Array);
|
|
62
|
+
expect(removed11[0]).toBeDefined();
|
|
63
|
+
expect(removed11[0].deleted).toBeDefined();
|
|
64
|
+
|
|
65
|
+
if (removed11[0].deleted) expect(removed11[0].deleted.key).toBe(11);
|
|
66
|
+
|
|
67
|
+
expect(bst.isAVLBalanced()).toBe(true);
|
|
68
|
+
|
|
69
|
+
expect(bst.getHeight(15)).toBe(1);
|
|
70
|
+
|
|
71
|
+
const removed1 = bst.delete(1);
|
|
72
|
+
expect(removed1).toBeInstanceOf(Array);
|
|
73
|
+
expect(removed1[0]).toBeDefined();
|
|
74
|
+
expect(removed1[0].deleted).toBeDefined();
|
|
75
|
+
if (removed1[0].deleted) expect(removed1[0].deleted.key).toBe(1);
|
|
76
|
+
|
|
77
|
+
expect(bst.isAVLBalanced()).toBe(true);
|
|
78
|
+
|
|
79
|
+
expect(bst.getHeight()).toBe(4);
|
|
80
|
+
|
|
81
|
+
const removed4 = bst.delete(4);
|
|
82
|
+
expect(removed4).toBeInstanceOf(Array);
|
|
83
|
+
expect(removed4[0]).toBeDefined();
|
|
84
|
+
expect(removed4[0].deleted).toBeDefined();
|
|
85
|
+
if (removed4[0].deleted) expect(removed4[0].deleted.key).toBe(4);
|
|
86
|
+
expect(bst.isAVLBalanced()).toBe(true);
|
|
87
|
+
expect(bst.getHeight()).toBe(4);
|
|
88
|
+
|
|
89
|
+
const removed10 = bst.delete(10);
|
|
90
|
+
expect(removed10).toBeInstanceOf(Array);
|
|
91
|
+
expect(removed10[0]).toBeDefined();
|
|
92
|
+
expect(removed10[0].deleted).toBeDefined();
|
|
93
|
+
if (removed10[0].deleted) expect(removed10[0].deleted.key).toBe(10);
|
|
94
|
+
expect(bst.isAVLBalanced()).toBe(false);
|
|
95
|
+
expect(bst.getHeight()).toBe(4);
|
|
96
|
+
|
|
97
|
+
const removed15 = bst.delete(15);
|
|
98
|
+
expect(removed15).toBeInstanceOf(Array);
|
|
99
|
+
expect(removed15[0]).toBeDefined();
|
|
100
|
+
expect(removed15[0].deleted).toBeDefined();
|
|
101
|
+
if (removed15[0].deleted) expect(removed15[0].deleted.key).toBe(15);
|
|
102
|
+
|
|
103
|
+
expect(bst.isAVLBalanced()).toBe(true);
|
|
104
|
+
expect(bst.getHeight()).toBe(3);
|
|
105
|
+
|
|
106
|
+
const removed5 = bst.delete(5);
|
|
107
|
+
expect(removed5).toBeInstanceOf(Array);
|
|
108
|
+
expect(removed5[0]).toBeDefined();
|
|
109
|
+
expect(removed5[0].deleted).toBeDefined();
|
|
110
|
+
if (removed5[0].deleted) expect(removed5[0].deleted.key).toBe(5);
|
|
111
|
+
|
|
112
|
+
expect(bst.isAVLBalanced()).toBe(true);
|
|
113
|
+
expect(bst.getHeight()).toBe(3);
|
|
114
|
+
|
|
115
|
+
const removed13 = bst.delete(13);
|
|
116
|
+
expect(removed13).toBeInstanceOf(Array);
|
|
117
|
+
expect(removed13[0]).toBeDefined();
|
|
118
|
+
expect(removed13[0].deleted).toBeDefined();
|
|
119
|
+
if (removed13[0].deleted) expect(removed13[0].deleted.key).toBe(13);
|
|
120
|
+
expect(bst.isAVLBalanced()).toBe(true);
|
|
121
|
+
expect(bst.getHeight()).toBe(3);
|
|
122
|
+
|
|
123
|
+
const removed3 = bst.delete(3);
|
|
124
|
+
expect(removed3).toBeInstanceOf(Array);
|
|
125
|
+
expect(removed3[0]).toBeDefined();
|
|
126
|
+
expect(removed3[0].deleted).toBeDefined();
|
|
127
|
+
if (removed3[0].deleted) expect(removed3[0].deleted.key).toBe(3);
|
|
128
|
+
expect(bst.isAVLBalanced()).toBe(false);
|
|
129
|
+
expect(bst.getHeight()).toBe(3);
|
|
130
|
+
|
|
131
|
+
const removed8 = bst.delete(8);
|
|
132
|
+
expect(removed8).toBeInstanceOf(Array);
|
|
133
|
+
expect(removed8[0]).toBeDefined();
|
|
134
|
+
expect(removed8[0].deleted).toBeDefined();
|
|
135
|
+
if (removed8[0].deleted) expect(removed8[0].deleted.key).toBe(8);
|
|
136
|
+
expect(bst.isAVLBalanced()).toBe(true);
|
|
137
|
+
expect(bst.getHeight()).toBe(3);
|
|
138
|
+
|
|
139
|
+
const removed6 = bst.delete(6);
|
|
140
|
+
expect(removed6).toBeInstanceOf(Array);
|
|
141
|
+
expect(removed6[0]).toBeDefined();
|
|
142
|
+
expect(removed6[0].deleted).toBeDefined();
|
|
143
|
+
if (removed6[0].deleted) expect(removed6[0].deleted.key).toBe(6);
|
|
144
|
+
expect(bst.delete(6).length).toBe(0);
|
|
145
|
+
expect(bst.isAVLBalanced()).toBe(false);
|
|
146
|
+
expect(bst.getHeight()).toBe(3);
|
|
147
|
+
|
|
148
|
+
const removed7 = bst.delete(7);
|
|
149
|
+
expect(removed7).toBeInstanceOf(Array);
|
|
150
|
+
expect(removed7[0]).toBeDefined();
|
|
151
|
+
expect(removed7[0].deleted).toBeDefined();
|
|
152
|
+
if (removed7[0].deleted) expect(removed7[0].deleted.key).toBe(7);
|
|
153
|
+
expect(bst.isAVLBalanced()).toBe(false);
|
|
154
|
+
expect(bst.getHeight()).toBe(3);
|
|
155
|
+
|
|
156
|
+
const removed9 = bst.delete(9);
|
|
157
|
+
expect(removed9).toBeInstanceOf(Array);
|
|
158
|
+
expect(removed9[0]).toBeDefined();
|
|
159
|
+
expect(removed9[0].deleted).toBeDefined();
|
|
160
|
+
if (removed9[0].deleted) expect(removed9[0].deleted.key).toBe(9);
|
|
161
|
+
expect(bst.isAVLBalanced()).toBe(false);
|
|
162
|
+
expect(bst.getHeight()).toBe(3);
|
|
163
|
+
|
|
164
|
+
const removed14 = bst.delete(14);
|
|
165
|
+
expect(removed14).toBeInstanceOf(Array);
|
|
166
|
+
expect(removed14[0]).toBeDefined();
|
|
167
|
+
expect(removed14[0].deleted).toBeDefined();
|
|
168
|
+
if (removed14[0].deleted) expect(removed14[0].deleted.key).toBe(14);
|
|
169
|
+
expect(bst.isAVLBalanced()).toBe(false);
|
|
170
|
+
expect(bst.getHeight()).toBe(2);
|
|
171
|
+
|
|
172
|
+
expect(bst.isAVLBalanced()).toBe(false);
|
|
173
|
+
|
|
174
|
+
const bfsIDs = bst.bfs();
|
|
175
|
+
expect(bfsIDs[0]).toBe(2);
|
|
176
|
+
expect(bfsIDs[1]).toBe(12);
|
|
177
|
+
expect(bfsIDs[2]).toBe(16);
|
|
178
|
+
|
|
179
|
+
const bfsNodes = bst.bfs(node => node);
|
|
180
|
+
expect(bfsNodes[0].key).toBe(2);
|
|
181
|
+
expect(bfsNodes[1].key).toBe(12);
|
|
182
|
+
expect(bfsNodes[2].key).toBe(16);
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
it('should perform various operations on a Binary Search Tree with object values', () => {
|
|
186
|
+
const objBST = new BST<{key: number; keyA: number}>();
|
|
187
|
+
expect(objBST).toBeInstanceOf(BST);
|
|
188
|
+
objBST.add(11, {key: 11, keyA: 11});
|
|
189
|
+
objBST.add(3, {key: 3, keyA: 3});
|
|
190
|
+
const values = [
|
|
191
|
+
{key: 15, keyA: 15},
|
|
192
|
+
{key: 1, keyA: 1},
|
|
193
|
+
{key: 8, keyA: 8},
|
|
194
|
+
{key: 13, keyA: 13},
|
|
195
|
+
{key: 16, keyA: 16},
|
|
196
|
+
{key: 2, keyA: 2},
|
|
197
|
+
{key: 6, keyA: 6},
|
|
198
|
+
{key: 9, keyA: 9},
|
|
199
|
+
{key: 12, keyA: 12},
|
|
200
|
+
{key: 14, keyA: 14},
|
|
201
|
+
{key: 4, keyA: 4},
|
|
202
|
+
{key: 7, keyA: 7},
|
|
203
|
+
{key: 10, keyA: 10},
|
|
204
|
+
{key: 5, keyA: 5}
|
|
205
|
+
];
|
|
206
|
+
|
|
207
|
+
objBST.addMany(
|
|
208
|
+
values.map(item => item.key),
|
|
209
|
+
values,
|
|
210
|
+
false
|
|
211
|
+
);
|
|
212
|
+
|
|
213
|
+
expect(objBST.root).toBeInstanceOf(BSTNode);
|
|
214
|
+
|
|
215
|
+
if (objBST.root) expect(objBST.root.key).toBe(11);
|
|
216
|
+
|
|
217
|
+
expect(objBST.has(6)).toBe(true);
|
|
218
|
+
|
|
219
|
+
const node6 = objBST.getNode(6);
|
|
220
|
+
expect(node6 && objBST.getHeight(node6)).toBe(2);
|
|
221
|
+
expect(node6 && objBST.getDepth(node6)).toBe(3);
|
|
222
|
+
|
|
223
|
+
const nodeId10 = objBST.get(10);
|
|
224
|
+
expect(nodeId10?.key).toBe(10);
|
|
225
|
+
|
|
226
|
+
const nodeVal9 = objBST.get(9);
|
|
227
|
+
expect(nodeVal9?.key).toBe(9);
|
|
228
|
+
|
|
229
|
+
const leftMost = objBST.getLeftMost();
|
|
230
|
+
expect(leftMost?.key).toBe(1);
|
|
231
|
+
|
|
232
|
+
const node15 = objBST.getNode(15);
|
|
233
|
+
expect(node15?.value).toEqual({key: 15, keyA: 15});
|
|
234
|
+
const minNodeBySpecificNode = node15 && objBST.getLeftMost(node15);
|
|
235
|
+
expect(minNodeBySpecificNode?.key).toBe(12);
|
|
236
|
+
|
|
237
|
+
let subTreeSum = 0;
|
|
238
|
+
node15 && objBST.subTreeTraverse(node => (subTreeSum += node.key), node15);
|
|
239
|
+
expect(subTreeSum).toBe(70);
|
|
240
|
+
|
|
241
|
+
let lesserSum = 0;
|
|
242
|
+
objBST.lesserOrGreaterTraverse(node => (lesserSum += node.key), CP.lt, 10);
|
|
243
|
+
expect(lesserSum).toBe(45);
|
|
244
|
+
|
|
245
|
+
expect(node15).toBeInstanceOf(BSTNode);
|
|
246
|
+
|
|
247
|
+
const node11 = objBST.getNode(11);
|
|
248
|
+
expect(node11).toBeInstanceOf(BSTNode);
|
|
249
|
+
|
|
250
|
+
const dfsInorderNodes = objBST.dfs(node => node, 'in');
|
|
251
|
+
expect(dfsInorderNodes[0].key).toBe(1);
|
|
252
|
+
expect(dfsInorderNodes[dfsInorderNodes.length - 1].key).toBe(16);
|
|
253
|
+
|
|
254
|
+
objBST.perfectlyBalance();
|
|
255
|
+
expect(objBST.isPerfectlyBalanced()).toBe(true);
|
|
256
|
+
|
|
257
|
+
const bfsNodesAfterBalanced = objBST.bfs(node => node);
|
|
258
|
+
expect(bfsNodesAfterBalanced[0].key).toBe(8);
|
|
259
|
+
expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16);
|
|
260
|
+
|
|
261
|
+
const removed11 = objBST.delete(11);
|
|
262
|
+
expect(removed11).toBeInstanceOf(Array);
|
|
263
|
+
expect(removed11[0]).toBeDefined();
|
|
264
|
+
expect(removed11[0].deleted).toBeDefined();
|
|
265
|
+
|
|
266
|
+
if (removed11[0].deleted) expect(removed11[0].deleted.key).toBe(11);
|
|
267
|
+
|
|
268
|
+
expect(objBST.isAVLBalanced()).toBe(true);
|
|
269
|
+
|
|
270
|
+
expect(node15 && objBST.getHeight(node15)).toBe(2);
|
|
271
|
+
|
|
272
|
+
const removed1 = objBST.delete(1);
|
|
273
|
+
expect(removed1).toBeInstanceOf(Array);
|
|
274
|
+
expect(removed1[0]).toBeDefined();
|
|
275
|
+
expect(removed1[0].deleted).toBeDefined();
|
|
276
|
+
if (removed1[0].deleted) expect(removed1[0].deleted.key).toBe(1);
|
|
277
|
+
|
|
278
|
+
expect(objBST.isAVLBalanced()).toBe(true);
|
|
279
|
+
|
|
280
|
+
expect(objBST.getHeight()).toBe(4);
|
|
281
|
+
|
|
282
|
+
const removed4 = objBST.delete(4);
|
|
283
|
+
expect(removed4).toBeInstanceOf(Array);
|
|
284
|
+
expect(removed4[0]).toBeDefined();
|
|
285
|
+
expect(removed4[0].deleted).toBeDefined();
|
|
286
|
+
if (removed4[0].deleted) expect(removed4[0].deleted.key).toBe(4);
|
|
287
|
+
expect(objBST.isAVLBalanced()).toBe(true);
|
|
288
|
+
expect(objBST.getHeight()).toBe(4);
|
|
289
|
+
|
|
290
|
+
const removed10 = objBST.delete(10);
|
|
291
|
+
expect(removed10).toBeInstanceOf(Array);
|
|
292
|
+
expect(removed10[0]).toBeDefined();
|
|
293
|
+
expect(removed10[0].deleted).toBeDefined();
|
|
294
|
+
if (removed10[0].deleted) expect(removed10[0].deleted.key).toBe(10);
|
|
295
|
+
expect(objBST.isAVLBalanced()).toBe(false);
|
|
296
|
+
expect(objBST.getHeight()).toBe(4);
|
|
297
|
+
|
|
298
|
+
const removed15 = objBST.delete(15);
|
|
299
|
+
expect(removed15).toBeInstanceOf(Array);
|
|
300
|
+
expect(removed15[0]).toBeDefined();
|
|
301
|
+
expect(removed15[0].deleted).toBeDefined();
|
|
302
|
+
if (removed15[0].deleted) expect(removed15[0].deleted.key).toBe(15);
|
|
303
|
+
|
|
304
|
+
expect(objBST.isAVLBalanced()).toBe(true);
|
|
305
|
+
expect(objBST.getHeight()).toBe(3);
|
|
306
|
+
|
|
307
|
+
const removed5 = objBST.delete(5);
|
|
308
|
+
expect(removed5).toBeInstanceOf(Array);
|
|
309
|
+
expect(removed5[0]).toBeDefined();
|
|
310
|
+
expect(removed5[0].deleted).toBeDefined();
|
|
311
|
+
if (removed5[0].deleted) expect(removed5[0].deleted.key).toBe(5);
|
|
312
|
+
|
|
313
|
+
expect(objBST.isAVLBalanced()).toBe(true);
|
|
314
|
+
expect(objBST.getHeight()).toBe(3);
|
|
315
|
+
|
|
316
|
+
const removed13 = objBST.delete(13);
|
|
317
|
+
expect(removed13).toBeInstanceOf(Array);
|
|
318
|
+
expect(removed13[0]).toBeDefined();
|
|
319
|
+
expect(removed13[0].deleted).toBeDefined();
|
|
320
|
+
if (removed13[0].deleted) expect(removed13[0].deleted.key).toBe(13);
|
|
321
|
+
expect(objBST.isAVLBalanced()).toBe(true);
|
|
322
|
+
expect(objBST.getHeight()).toBe(3);
|
|
323
|
+
|
|
324
|
+
const removed3 = objBST.delete(3);
|
|
325
|
+
expect(removed3).toBeInstanceOf(Array);
|
|
326
|
+
expect(removed3[0]).toBeDefined();
|
|
327
|
+
expect(removed3[0].deleted).toBeDefined();
|
|
328
|
+
if (removed3[0].deleted) expect(removed3[0].deleted.key).toBe(3);
|
|
329
|
+
expect(objBST.isAVLBalanced()).toBe(false);
|
|
330
|
+
expect(objBST.getHeight()).toBe(3);
|
|
331
|
+
|
|
332
|
+
const removed8 = objBST.delete(8);
|
|
333
|
+
expect(removed8).toBeInstanceOf(Array);
|
|
334
|
+
expect(removed8[0]).toBeDefined();
|
|
335
|
+
expect(removed8[0].deleted).toBeDefined();
|
|
336
|
+
if (removed8[0].deleted) expect(removed8[0].deleted.key).toBe(8);
|
|
337
|
+
expect(objBST.isAVLBalanced()).toBe(true);
|
|
338
|
+
expect(objBST.getHeight()).toBe(3);
|
|
339
|
+
|
|
340
|
+
const removed6 = objBST.delete(6);
|
|
341
|
+
expect(removed6).toBeInstanceOf(Array);
|
|
342
|
+
expect(removed6[0]).toBeDefined();
|
|
343
|
+
expect(removed6[0].deleted).toBeDefined();
|
|
344
|
+
if (removed6[0].deleted) expect(removed6[0].deleted.key).toBe(6);
|
|
345
|
+
expect(objBST.delete(6).length).toBe(0);
|
|
346
|
+
expect(objBST.isAVLBalanced()).toBe(false);
|
|
347
|
+
expect(objBST.getHeight()).toBe(3);
|
|
348
|
+
|
|
349
|
+
const removed7 = objBST.delete(7);
|
|
350
|
+
expect(removed7).toBeInstanceOf(Array);
|
|
351
|
+
expect(removed7[0]).toBeDefined();
|
|
352
|
+
expect(removed7[0].deleted).toBeDefined();
|
|
353
|
+
if (removed7[0].deleted) expect(removed7[0].deleted.key).toBe(7);
|
|
354
|
+
expect(objBST.isAVLBalanced()).toBe(false);
|
|
355
|
+
expect(objBST.getHeight()).toBe(3);
|
|
356
|
+
|
|
357
|
+
const removed9 = objBST.delete(9);
|
|
358
|
+
expect(removed9).toBeInstanceOf(Array);
|
|
359
|
+
expect(removed9[0]).toBeDefined();
|
|
360
|
+
expect(removed9[0].deleted).toBeDefined();
|
|
361
|
+
if (removed9[0].deleted) expect(removed9[0].deleted.key).toBe(9);
|
|
362
|
+
expect(objBST.isAVLBalanced()).toBe(false);
|
|
363
|
+
expect(objBST.getHeight()).toBe(3);
|
|
364
|
+
|
|
365
|
+
const removed14 = objBST.delete(14);
|
|
366
|
+
expect(removed14).toBeInstanceOf(Array);
|
|
367
|
+
expect(removed14[0]).toBeDefined();
|
|
368
|
+
expect(removed14[0].deleted).toBeDefined();
|
|
369
|
+
if (removed14[0].deleted) expect(removed14[0].deleted.key).toBe(14);
|
|
370
|
+
expect(objBST.isAVLBalanced()).toBe(false);
|
|
371
|
+
expect(objBST.getHeight()).toBe(2);
|
|
372
|
+
|
|
373
|
+
expect(objBST.isAVLBalanced()).toBe(false);
|
|
374
|
+
|
|
375
|
+
const bfsIDs = objBST.bfs();
|
|
376
|
+
expect(bfsIDs[0]).toBe(2);
|
|
377
|
+
expect(bfsIDs[1]).toBe(12);
|
|
378
|
+
expect(bfsIDs[2]).toBe(16);
|
|
379
|
+
|
|
380
|
+
const bfsNodes = objBST.bfs(node => node);
|
|
381
|
+
expect(bfsNodes[0].key).toBe(2);
|
|
382
|
+
expect(bfsNodes[1].key).toBe(12);
|
|
383
|
+
expect(bfsNodes[2].key).toBe(16);
|
|
384
|
+
});
|
|
385
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
const {MinHeap} = require('heap-typed');
|
|
2
|
+
|
|
3
|
+
describe('JS Heap Operation Test', () => {
|
|
4
|
+
it('should numeric heap work well', function () {
|
|
5
|
+
const minNumHeap = new MinHeap();
|
|
6
|
+
minNumHeap.add(1).add(6).add(2).add(0).add(5).add(9);
|
|
7
|
+
expect(minNumHeap.poll()).toBe(0);
|
|
8
|
+
expect(minNumHeap.poll()).toBe(1);
|
|
9
|
+
expect(minNumHeap.peek()).toBe(2);
|
|
10
|
+
expect(minNumHeap.toArray().length).toBe(4);
|
|
11
|
+
expect(minNumHeap.toArray()[0]).toBe(2);
|
|
12
|
+
expect(minNumHeap.toArray()[1]).toBe(5);
|
|
13
|
+
expect(minNumHeap.toArray()[2]).toBe(9);
|
|
14
|
+
expect(minNumHeap.toArray()[3]).toBe(6);
|
|
15
|
+
});
|
|
16
|
+
});
|