data-structure-typed 1.50.7 → 1.50.9
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 +73 -67
- package/benchmark/report.html +1 -37
- package/benchmark/report.json +15 -393
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +14 -3
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +17 -6
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +1 -1
- package/dist/cjs/data-structures/binary-tree/binary-tree.js +33 -34
- package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/bst.d.ts +22 -3
- package/dist/cjs/data-structures/binary-tree/bst.js +78 -39
- package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +5 -5
- package/dist/cjs/data-structures/binary-tree/rb-tree.js +47 -50
- package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +40 -23
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +44 -28
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
- package/dist/cjs/data-structures/heap/heap.d.ts +1 -1
- package/dist/cjs/data-structures/heap/heap.js +5 -5
- package/dist/cjs/types/common.d.ts +6 -29
- package/dist/cjs/types/common.js +0 -40
- package/dist/cjs/types/common.js.map +1 -1
- package/dist/cjs/types/data-structures/binary-tree/rb-tree.d.ts +1 -4
- package/dist/cjs/types/data-structures/binary-tree/rb-tree.js +0 -6
- package/dist/cjs/types/data-structures/binary-tree/rb-tree.js.map +1 -1
- package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +14 -3
- package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js +17 -6
- package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +1 -1
- package/dist/mjs/data-structures/binary-tree/binary-tree.js +33 -34
- package/dist/mjs/data-structures/binary-tree/bst.d.ts +22 -3
- package/dist/mjs/data-structures/binary-tree/bst.js +78 -39
- package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +5 -5
- package/dist/mjs/data-structures/binary-tree/rb-tree.js +47 -50
- package/dist/mjs/data-structures/binary-tree/tree-multi-map.d.ts +40 -23
- package/dist/mjs/data-structures/binary-tree/tree-multi-map.js +44 -28
- package/dist/mjs/data-structures/heap/heap.d.ts +1 -1
- package/dist/mjs/data-structures/heap/heap.js +5 -5
- package/dist/mjs/types/common.d.ts +6 -29
- package/dist/mjs/types/common.js +1 -39
- package/dist/mjs/types/data-structures/binary-tree/rb-tree.d.ts +1 -4
- package/dist/mjs/types/data-structures/binary-tree/rb-tree.js +1 -5
- package/dist/umd/data-structure-typed.js +212 -206
- package/dist/umd/data-structure-typed.min.js +2 -2
- package/dist/umd/data-structure-typed.min.js.map +1 -1
- package/package.json +6 -6
- package/src/data-structures/binary-tree/avl-tree-multi-map.ts +20 -7
- package/src/data-structures/binary-tree/binary-tree.ts +54 -45
- package/src/data-structures/binary-tree/bst.ts +86 -42
- package/src/data-structures/binary-tree/rb-tree.ts +49 -49
- package/src/data-structures/binary-tree/tree-multi-map.ts +48 -29
- package/src/data-structures/heap/heap.ts +5 -5
- package/src/types/common.ts +6 -30
- package/src/types/data-structures/binary-tree/rb-tree.ts +1 -1
- package/test/integration/all-in-one.test.ts +4 -4
- package/test/integration/avl-tree.test.ts +1 -1
- package/test/integration/bst.test.ts +2 -2
- package/test/performance/data-structures/binary-tree/avl-tree.test.ts +20 -15
- package/test/performance/data-structures/binary-tree/binary-tree.test.ts +1 -1
- package/test/performance/data-structures/binary-tree/rb-tree.test.ts +13 -22
- package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +15 -23
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +8 -8
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +127 -74
- package/test/unit/data-structures/binary-tree/bst.test.ts +20 -20
- package/test/unit/data-structures/binary-tree/overall.test.ts +7 -7
- package/test/unit/data-structures/binary-tree/rb-tree.test.ts +31 -26
- package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +26 -34
- package/test/unit/data-structures/priority-queue/priority-queue.test.ts +3 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BinaryTreeNode, BSTNode,
|
|
1
|
+
import { BinaryTreeNode, BSTNode, RedBlackTree, RedBlackTreeNode } from '../../../../src';
|
|
2
2
|
import { getRandomInt, getRandomIntArray, magnitude } from '../../../utils';
|
|
3
3
|
import { OrderedMap } from 'js-sdsl';
|
|
4
4
|
|
|
@@ -53,6 +53,11 @@ describe('RedBlackTree 1', () => {
|
|
|
53
53
|
|
|
54
54
|
expect(rbTree.getNode(15)).toBe(undefined);
|
|
55
55
|
});
|
|
56
|
+
|
|
57
|
+
it('should getNode performance O(log n)', () => {
|
|
58
|
+
for (let i = 0; i < 10; i++) rbTree.add(i);
|
|
59
|
+
rbTree.getNode(6);
|
|
60
|
+
});
|
|
56
61
|
});
|
|
57
62
|
|
|
58
63
|
describe('minimum', () => {
|
|
@@ -258,42 +263,42 @@ describe('RedBlackTree 2', () => {
|
|
|
258
263
|
let node6F = rbTree.getNode(6);
|
|
259
264
|
let node2F = rbTree.getNode(2);
|
|
260
265
|
expect(node10F?.key).toBe(10);
|
|
261
|
-
expect(node10F?.color).toBe(
|
|
266
|
+
expect(node10F?.color).toBe('BLACK');
|
|
262
267
|
expect(node10F?.left).toBe(node5F);
|
|
263
268
|
expect(node10F?.right).toBe(node20F);
|
|
264
269
|
expect(node10F?.parent).toBe(undefined);
|
|
265
270
|
expect(node20F?.key).toBe(20);
|
|
266
|
-
expect(node20F?.color).toBe(
|
|
271
|
+
expect(node20F?.color).toBe('BLACK');
|
|
267
272
|
expect(node20F?.left).toBe(node15F);
|
|
268
273
|
expect(node20F?.right).toBe(node21F);
|
|
269
274
|
expect(node20F?.parent).toBe(node10F);
|
|
270
275
|
expect(node5F?.key).toBe(5);
|
|
271
|
-
expect(node5F?.color).toBe(
|
|
276
|
+
expect(node5F?.color).toBe('BLACK');
|
|
272
277
|
expect(node5F?.left).toBe(node2F);
|
|
273
278
|
expect(node5F?.right).toBe(node6F);
|
|
274
279
|
expect(node5F?.parent).toBe(node10F);
|
|
275
280
|
expect(node15F?.key).toBe(15);
|
|
276
|
-
expect(node15F?.color).toBe(
|
|
281
|
+
expect(node15F?.color).toBe('RED');
|
|
277
282
|
expect(node15F?.left).toBe(rbTree.SENTINEL);
|
|
278
283
|
expect(node15F?.right).toBe(rbTree.SENTINEL);
|
|
279
284
|
expect(node15F?.parent).toBe(node20F);
|
|
280
285
|
expect(node21F?.key).toBe(21);
|
|
281
|
-
expect(node21F?.color).toBe(
|
|
286
|
+
expect(node21F?.color).toBe('RED');
|
|
282
287
|
expect(node21F?.left).toBe(rbTree.SENTINEL);
|
|
283
288
|
expect(node21F?.right).toBe(rbTree.SENTINEL);
|
|
284
289
|
expect(node21F?.parent).toBe(node20F);
|
|
285
290
|
expect(node6F?.key).toBe(6);
|
|
286
|
-
expect(node6F?.color).toBe(
|
|
291
|
+
expect(node6F?.color).toBe('RED');
|
|
287
292
|
expect(node6F?.left).toBe(rbTree.SENTINEL);
|
|
288
293
|
expect(node6F?.right).toBe(rbTree.SENTINEL);
|
|
289
294
|
expect(node6F?.parent).toBe(node5F);
|
|
290
295
|
expect(node2F?.key).toBe(2);
|
|
291
|
-
expect(node2F?.color).toBe(
|
|
296
|
+
expect(node2F?.color).toBe('RED');
|
|
292
297
|
expect(node2F?.left).toBe(rbTree.SENTINEL);
|
|
293
298
|
expect(node2F?.right).toBe(rbTree.SENTINEL);
|
|
294
299
|
expect(node2F?.parent).toBe(node5F);
|
|
295
300
|
expect(node15F?.key).toBe(15);
|
|
296
|
-
expect(node15F?.color).toBe(
|
|
301
|
+
expect(node15F?.color).toBe('RED');
|
|
297
302
|
expect(node15F?.left).toBe(rbTree.SENTINEL);
|
|
298
303
|
expect(node15F?.right).toBe(rbTree.SENTINEL);
|
|
299
304
|
expect(node15F?.parent).toBe(node20F);
|
|
@@ -306,38 +311,38 @@ describe('RedBlackTree 2', () => {
|
|
|
306
311
|
node6F = rbTree.getNode(6);
|
|
307
312
|
node2F = rbTree.getNode(2);
|
|
308
313
|
expect(node10F?.key).toBe(10);
|
|
309
|
-
expect(node10F?.color).toBe(
|
|
314
|
+
expect(node10F?.color).toBe('BLACK');
|
|
310
315
|
expect(node10F?.left).toBe(node6F);
|
|
311
316
|
expect(node10F?.right).toBe(node20F);
|
|
312
317
|
expect(node10F?.parent).toBe(undefined);
|
|
313
318
|
expect(node20F?.key).toBe(20);
|
|
314
|
-
expect(node20F?.color).toBe(
|
|
319
|
+
expect(node20F?.color).toBe('BLACK');
|
|
315
320
|
expect(node20F?.left).toBe(node15F);
|
|
316
321
|
expect(node20F?.right).toBe(node21F);
|
|
317
322
|
expect(node20F?.parent).toBe(node10F);
|
|
318
323
|
expect(node5F).toBe(undefined);
|
|
319
324
|
expect(node15F?.key).toBe(15);
|
|
320
|
-
expect(node15F?.color).toBe(
|
|
325
|
+
expect(node15F?.color).toBe('RED');
|
|
321
326
|
expect(node15F?.left).toBe(rbTree.SENTINEL);
|
|
322
327
|
expect(node15F?.right).toBe(rbTree.SENTINEL);
|
|
323
328
|
expect(node15F?.parent).toBe(node20F);
|
|
324
329
|
expect(node21F?.key).toBe(21);
|
|
325
|
-
expect(node21F?.color).toBe(
|
|
330
|
+
expect(node21F?.color).toBe('RED');
|
|
326
331
|
expect(node21F?.left).toBe(rbTree.SENTINEL);
|
|
327
332
|
expect(node21F?.right).toBe(rbTree.SENTINEL);
|
|
328
333
|
expect(node21F?.parent).toBe(node20F);
|
|
329
334
|
expect(node6F?.key).toBe(6);
|
|
330
|
-
expect(node6F?.color).toBe(
|
|
335
|
+
expect(node6F?.color).toBe('BLACK');
|
|
331
336
|
expect(node6F?.left).toBe(node2F);
|
|
332
337
|
expect(node6F?.right).toBe(rbTree.SENTINEL);
|
|
333
338
|
expect(node6F?.parent).toBe(node10F);
|
|
334
339
|
expect(node2F?.key).toBe(2);
|
|
335
|
-
expect(node2F?.color).toBe(
|
|
340
|
+
expect(node2F?.color).toBe('RED');
|
|
336
341
|
expect(node2F?.left).toBe(rbTree.SENTINEL);
|
|
337
342
|
expect(node2F?.right).toBe(rbTree.SENTINEL);
|
|
338
343
|
expect(node2F?.parent).toBe(node6F);
|
|
339
344
|
expect(node15F?.key).toBe(15);
|
|
340
|
-
expect(node15F?.color).toBe(
|
|
345
|
+
expect(node15F?.color).toBe('RED');
|
|
341
346
|
expect(node15F?.left).toBe(rbTree.SENTINEL);
|
|
342
347
|
expect(node15F?.right).toBe(rbTree.SENTINEL);
|
|
343
348
|
expect(node15F?.parent).toBe(node20F);
|
|
@@ -350,34 +355,34 @@ describe('RedBlackTree 2', () => {
|
|
|
350
355
|
node6F = rbTree.getNode(6);
|
|
351
356
|
node2F = rbTree.getNode(2);
|
|
352
357
|
expect(node10F?.key).toBe(10);
|
|
353
|
-
expect(node10F?.color).toBe(
|
|
358
|
+
expect(node10F?.color).toBe('BLACK');
|
|
354
359
|
expect(node10F?.left).toBe(node6F);
|
|
355
360
|
expect(node10F?.right).toBe(node21F);
|
|
356
361
|
expect(node10F?.parent).toBe(undefined);
|
|
357
362
|
expect(node20F).toBe(undefined);
|
|
358
363
|
expect(node5F).toBe(undefined);
|
|
359
364
|
expect(node15F?.key).toBe(15);
|
|
360
|
-
expect(node15F?.color).toBe(
|
|
365
|
+
expect(node15F?.color).toBe('RED');
|
|
361
366
|
expect(node15F?.left).toBe(rbTree.SENTINEL);
|
|
362
367
|
expect(node15F?.right).toBe(rbTree.SENTINEL);
|
|
363
368
|
expect(node15F?.parent).toBe(node21F);
|
|
364
369
|
expect(node21F?.key).toBe(21);
|
|
365
|
-
expect(node21F?.color).toBe(
|
|
370
|
+
expect(node21F?.color).toBe('BLACK');
|
|
366
371
|
expect(node21F?.left).toBe(node15F);
|
|
367
372
|
expect(node21F?.right).toBe(rbTree.SENTINEL);
|
|
368
373
|
expect(node21F?.parent).toBe(node10F);
|
|
369
374
|
expect(node6F?.key).toBe(6);
|
|
370
|
-
expect(node6F?.color).toBe(
|
|
375
|
+
expect(node6F?.color).toBe('BLACK');
|
|
371
376
|
expect(node6F?.left).toBe(node2F);
|
|
372
377
|
expect(node6F?.right).toBe(rbTree.SENTINEL);
|
|
373
378
|
expect(node6F?.parent).toBe(node10F);
|
|
374
379
|
expect(node2F?.key).toBe(2);
|
|
375
|
-
expect(node2F?.color).toBe(
|
|
380
|
+
expect(node2F?.color).toBe('RED');
|
|
376
381
|
expect(node2F?.left).toBe(rbTree.SENTINEL);
|
|
377
382
|
expect(node2F?.right).toBe(rbTree.SENTINEL);
|
|
378
383
|
expect(node2F?.parent).toBe(node6F);
|
|
379
384
|
expect(node15F?.key).toBe(15);
|
|
380
|
-
expect(node15F?.color).toBe(
|
|
385
|
+
expect(node15F?.color).toBe('RED');
|
|
381
386
|
expect(node15F?.left).toBe(rbTree.SENTINEL);
|
|
382
387
|
expect(node15F?.right).toBe(rbTree.SENTINEL);
|
|
383
388
|
expect(node15F?.parent).toBe(node21F);
|
|
@@ -477,13 +482,13 @@ describe('RedBlackTree 2', () => {
|
|
|
477
482
|
|
|
478
483
|
expect(rbTree.size).toBe(51);
|
|
479
484
|
expect(rbTree.isBST()).toBe(true);
|
|
480
|
-
expect(rbTree.isBST(rbTree.root,
|
|
485
|
+
expect(rbTree.isBST(rbTree.root, 'RECURSIVE')).toBe(true);
|
|
481
486
|
|
|
482
|
-
expect(rbTree.dfs(n => n.key, '
|
|
487
|
+
expect(rbTree.dfs(n => n.key, 'IN', rbTree.root, 'ITERATIVE')).toEqual([
|
|
483
488
|
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,
|
|
484
489
|
77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
|
|
485
490
|
]);
|
|
486
|
-
expect(rbTree.dfs(n => n.key, '
|
|
491
|
+
expect(rbTree.dfs(n => n.key, 'IN', rbTree.root, 'RECURSIVE')).toEqual([
|
|
487
492
|
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,
|
|
488
493
|
77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
|
|
489
494
|
]);
|
|
@@ -499,7 +504,7 @@ describe('RedBlackTree 2', () => {
|
|
|
499
504
|
|
|
500
505
|
expect(rbTree.size).toBe(0);
|
|
501
506
|
expect(rbTree.isBST()).toBe(true);
|
|
502
|
-
expect(rbTree.dfs(n => n.key, '
|
|
507
|
+
expect(rbTree.dfs(n => n.key, 'IN', rbTree.root, 'ITERATIVE')).toEqual([]);
|
|
503
508
|
|
|
504
509
|
rbTree.clear();
|
|
505
510
|
for (let i = 0; i < 1000; i++) {
|
|
@@ -1,12 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
BinaryTreeNode,
|
|
3
|
-
BSTNode,
|
|
4
|
-
CP,
|
|
5
|
-
IterationType,
|
|
6
|
-
RedBlackTreeNode,
|
|
7
|
-
TreeMultiMap,
|
|
8
|
-
TreeMultiMapNode
|
|
9
|
-
} from '../../../../src';
|
|
1
|
+
import { BinaryTreeNode, BSTNode, RedBlackTreeNode, TreeMultiMap, TreeMultiMapNode } from '../../../../src';
|
|
10
2
|
import { isDebugTest } from '../../../config';
|
|
11
3
|
import { getRandomInt } from '../../../utils';
|
|
12
4
|
|
|
@@ -30,7 +22,7 @@ describe('TreeMultiMap count', () => {
|
|
|
30
22
|
const newNode = new TreeMultiMapNode(3, 33, 10);
|
|
31
23
|
tmm.add(newNode);
|
|
32
24
|
expect(tmm.count).toBe(15);
|
|
33
|
-
expect(tmm.
|
|
25
|
+
expect(tmm.getComputedCount()).toBe(15);
|
|
34
26
|
expect(tmm.getNode(3)?.count).toBe(11);
|
|
35
27
|
});
|
|
36
28
|
|
|
@@ -40,8 +32,8 @@ describe('TreeMultiMap count', () => {
|
|
|
40
32
|
[2, 2],
|
|
41
33
|
[3, 3]
|
|
42
34
|
]);
|
|
43
|
-
tmm.lesserOrGreaterTraverse(node => (node.count += 2),
|
|
44
|
-
expect(tmm.
|
|
35
|
+
tmm.lesserOrGreaterTraverse(node => (node.count += 2), 'GT', 1);
|
|
36
|
+
expect(tmm.getComputedCount()).toBe(7);
|
|
45
37
|
expect(tmm.count).toBe(3);
|
|
46
38
|
});
|
|
47
39
|
});
|
|
@@ -65,7 +57,7 @@ describe('TreeMultiMap operations test1', () => {
|
|
|
65
57
|
tmm.add([11, 11]);
|
|
66
58
|
tmm.add([3, 3]);
|
|
67
59
|
expect(tmm.count).toBe(2);
|
|
68
|
-
expect(tmm.
|
|
60
|
+
expect(tmm.getComputedCount()).toBe(2);
|
|
69
61
|
expect(tmm.size).toBe(2);
|
|
70
62
|
|
|
71
63
|
const keyValuePairs: [number, number][] = [
|
|
@@ -90,13 +82,13 @@ describe('TreeMultiMap operations test1', () => {
|
|
|
90
82
|
tmm.addMany(keyValuePairs);
|
|
91
83
|
expect(tmm.size).toBe(16);
|
|
92
84
|
expect(tmm.count).toBe(18);
|
|
93
|
-
expect(tmm.
|
|
85
|
+
expect(tmm.getComputedCount()).toBe(18);
|
|
94
86
|
tmm.delete(11);
|
|
95
87
|
expect(tmm.count).toBe(17);
|
|
96
|
-
expect(tmm.
|
|
88
|
+
expect(tmm.getComputedCount()).toBe(17);
|
|
97
89
|
tmm.delete(3, undefined, true);
|
|
98
90
|
expect(tmm.count).toBe(15);
|
|
99
|
-
expect(tmm.
|
|
91
|
+
expect(tmm.getComputedCount()).toBe(15);
|
|
100
92
|
});
|
|
101
93
|
|
|
102
94
|
it('should perform various operations on a Binary Search Tree with numeric values1', () => {
|
|
@@ -131,7 +123,7 @@ describe('TreeMultiMap operations test1', () => {
|
|
|
131
123
|
|
|
132
124
|
expect(tmm.size).toBe(16);
|
|
133
125
|
expect(tmm.count).toBe(18);
|
|
134
|
-
expect(tmm.
|
|
126
|
+
expect(tmm.getComputedCount()).toBe(18);
|
|
135
127
|
|
|
136
128
|
expect(tmm.has(6));
|
|
137
129
|
isDebug && tmm.print();
|
|
@@ -156,25 +148,25 @@ describe('TreeMultiMap operations test1', () => {
|
|
|
156
148
|
expect(minNodeBySpecificNode?.key).toBe(14);
|
|
157
149
|
|
|
158
150
|
let subTreeSum = 0;
|
|
159
|
-
node15 && tmm.dfs(node => (subTreeSum += node.key), '
|
|
151
|
+
node15 && tmm.dfs(node => (subTreeSum += node.key), 'PRE', 15);
|
|
160
152
|
expect(subTreeSum).toBe(45);
|
|
161
153
|
let lesserSum = 0;
|
|
162
|
-
tmm.lesserOrGreaterTraverse((node: TreeMultiMapNode<number>) => (lesserSum += node.key),
|
|
154
|
+
tmm.lesserOrGreaterTraverse((node: TreeMultiMapNode<number>) => (lesserSum += node.key), 'LT', 10);
|
|
163
155
|
expect(lesserSum).toBe(45);
|
|
164
156
|
|
|
165
157
|
expect(node15 instanceof TreeMultiMapNode);
|
|
166
158
|
if (node15 instanceof TreeMultiMapNode) {
|
|
167
|
-
const subTreeAdd = tmm.dfs(node => (node.count += 1), '
|
|
159
|
+
const subTreeAdd = tmm.dfs(node => (node.count += 1), 'PRE', 15);
|
|
168
160
|
expect(subTreeAdd);
|
|
169
161
|
}
|
|
170
162
|
const node11 = tmm.getNode(11);
|
|
171
163
|
expect(node11 instanceof TreeMultiMapNode);
|
|
172
164
|
if (node11 instanceof TreeMultiMapNode) {
|
|
173
|
-
const allGreaterNodesAdded = tmm.lesserOrGreaterTraverse(node => (node.count += 2),
|
|
165
|
+
const allGreaterNodesAdded = tmm.lesserOrGreaterTraverse(node => (node.count += 2), 'GT', 11);
|
|
174
166
|
expect(allGreaterNodesAdded);
|
|
175
167
|
}
|
|
176
168
|
|
|
177
|
-
const dfsInorderNodes = tmm.dfs(node => node, '
|
|
169
|
+
const dfsInorderNodes = tmm.dfs(node => node, 'IN');
|
|
178
170
|
expect(dfsInorderNodes[0].key).toBe(1);
|
|
179
171
|
expect(dfsInorderNodes[dfsInorderNodes.length - 1].key).toBe(16);
|
|
180
172
|
expect(tmm.isPerfectlyBalanced()).toBe(false);
|
|
@@ -317,7 +309,7 @@ describe('TreeMultiMap operations test1', () => {
|
|
|
317
309
|
expect(bfsNodes[2].key).toBe(16);
|
|
318
310
|
|
|
319
311
|
expect(tmm.count).toBe(6);
|
|
320
|
-
expect(tmm.
|
|
312
|
+
expect(tmm.getComputedCount()).toBe(8);
|
|
321
313
|
});
|
|
322
314
|
|
|
323
315
|
it('should perform various operations on a Binary Search Tree with object values', () => {
|
|
@@ -349,7 +341,7 @@ describe('TreeMultiMap operations test1', () => {
|
|
|
349
341
|
if (objTreeMultiMap.root) expect(objTreeMultiMap.root.key).toBe(5);
|
|
350
342
|
|
|
351
343
|
expect(objTreeMultiMap.count).toBe(16);
|
|
352
|
-
expect(objTreeMultiMap.
|
|
344
|
+
expect(objTreeMultiMap.getComputedCount()).toBe(16);
|
|
353
345
|
|
|
354
346
|
expect(objTreeMultiMap.has(6)).toBe(true);
|
|
355
347
|
});
|
|
@@ -357,7 +349,7 @@ describe('TreeMultiMap operations test1', () => {
|
|
|
357
349
|
|
|
358
350
|
describe('TreeMultiMap operations test recursively1', () => {
|
|
359
351
|
it('should perform various operations on a Binary Search Tree with numeric values1', () => {
|
|
360
|
-
const tmm = new TreeMultiMap<number>([], { iterationType:
|
|
352
|
+
const tmm = new TreeMultiMap<number>([], { iterationType: 'RECURSIVE' });
|
|
361
353
|
|
|
362
354
|
expect(tmm instanceof TreeMultiMap);
|
|
363
355
|
tmm.add([11, 11]);
|
|
@@ -387,7 +379,7 @@ describe('TreeMultiMap operations test recursively1', () => {
|
|
|
387
379
|
|
|
388
380
|
expect(tmm.size).toBe(16);
|
|
389
381
|
expect(tmm.count).toBe(18);
|
|
390
|
-
expect(tmm.
|
|
382
|
+
expect(tmm.getComputedCount()).toBe(18);
|
|
391
383
|
|
|
392
384
|
expect(tmm.has(6));
|
|
393
385
|
|
|
@@ -412,7 +404,7 @@ describe('TreeMultiMap operations test recursively1', () => {
|
|
|
412
404
|
expect(minNodeBySpecificNode?.key).toBe(14);
|
|
413
405
|
|
|
414
406
|
let subTreeSum = 0;
|
|
415
|
-
node15 && tmm.dfs(node => (subTreeSum += node.key), '
|
|
407
|
+
node15 && tmm.dfs(node => (subTreeSum += node.key), 'PRE', 15);
|
|
416
408
|
expect(subTreeSum).toBe(45);
|
|
417
409
|
let lesserSum = 0;
|
|
418
410
|
expect(tmm.has(9)).toBe(true);
|
|
@@ -421,24 +413,24 @@ describe('TreeMultiMap operations test recursively1', () => {
|
|
|
421
413
|
lesserSum += node.key;
|
|
422
414
|
return node.key;
|
|
423
415
|
},
|
|
424
|
-
|
|
416
|
+
'LT',
|
|
425
417
|
10
|
|
426
418
|
);
|
|
427
419
|
expect(lesserSum).toBe(45);
|
|
428
420
|
|
|
429
421
|
expect(node15 instanceof TreeMultiMapNode);
|
|
430
422
|
if (node15 instanceof TreeMultiMapNode) {
|
|
431
|
-
const subTreeAdd = tmm.dfs(node => (node.count += 1), '
|
|
423
|
+
const subTreeAdd = tmm.dfs(node => (node.count += 1), 'PRE', 15);
|
|
432
424
|
expect(subTreeAdd);
|
|
433
425
|
}
|
|
434
426
|
const node11 = tmm.getNode(11);
|
|
435
427
|
expect(node11 instanceof TreeMultiMapNode);
|
|
436
428
|
if (node11 instanceof TreeMultiMapNode) {
|
|
437
|
-
const allGreaterNodesAdded = tmm.lesserOrGreaterTraverse(node => (node.count += 2),
|
|
429
|
+
const allGreaterNodesAdded = tmm.lesserOrGreaterTraverse(node => (node.count += 2), 'GT', 11);
|
|
438
430
|
expect(allGreaterNodesAdded);
|
|
439
431
|
}
|
|
440
432
|
|
|
441
|
-
const dfsInorderNodes = tmm.dfs(node => node, '
|
|
433
|
+
const dfsInorderNodes = tmm.dfs(node => node, 'IN');
|
|
442
434
|
expect(dfsInorderNodes[0].key).toBe(1);
|
|
443
435
|
expect(dfsInorderNodes[dfsInorderNodes.length - 1].key).toBe(16);
|
|
444
436
|
expect(tmm.isPerfectlyBalanced()).toBe(false);
|
|
@@ -582,7 +574,7 @@ describe('TreeMultiMap operations test recursively1', () => {
|
|
|
582
574
|
expect(bfsNodes[2].key).toBe(16);
|
|
583
575
|
|
|
584
576
|
expect(tmm.count).toBe(6);
|
|
585
|
-
expect(tmm.
|
|
577
|
+
expect(tmm.getComputedCount()).toBe(8);
|
|
586
578
|
});
|
|
587
579
|
|
|
588
580
|
it('should perform various operations on a Binary Search Tree with object values', () => {
|
|
@@ -614,7 +606,7 @@ describe('TreeMultiMap operations test recursively1', () => {
|
|
|
614
606
|
if (objTreeMultiMap.root) expect(objTreeMultiMap.root.key).toBe(5);
|
|
615
607
|
|
|
616
608
|
expect(objTreeMultiMap.count).toBe(16);
|
|
617
|
-
expect(objTreeMultiMap.
|
|
609
|
+
expect(objTreeMultiMap.getComputedCount()).toBe(16);
|
|
618
610
|
|
|
619
611
|
expect(objTreeMultiMap.has(6)).toBe(true);
|
|
620
612
|
});
|
|
@@ -819,7 +811,7 @@ describe('TreeMultiMap iterative methods test', () => {
|
|
|
819
811
|
|
|
820
812
|
test('should clone work well', () => {
|
|
821
813
|
expect(treeMM.count).toBe(21);
|
|
822
|
-
expect(treeMM.
|
|
814
|
+
expect(treeMM.getComputedCount()).toBe(21);
|
|
823
815
|
const cloned = treeMM.clone();
|
|
824
816
|
expect(cloned.root?.left?.key).toBe(1);
|
|
825
817
|
expect(cloned.root?.right?.value).toBe('c');
|
|
@@ -42,9 +42,9 @@ describe('PriorityQueue Operation Test', () => {
|
|
|
42
42
|
const clonedPriorityQueue = minPQ1.clone();
|
|
43
43
|
expect(clonedPriorityQueue.elements).toEqual(minPQ1.elements);
|
|
44
44
|
expect(clonedPriorityQueue.sort()).toEqual([1, 2, 3, 4, 5, 6, 7, 8]);
|
|
45
|
-
expect(minPQ1.dfs('
|
|
46
|
-
expect(minPQ1.dfs('
|
|
47
|
-
expect(minPQ1.dfs('
|
|
45
|
+
expect(minPQ1.dfs('IN')).toEqual([4, 3, 2, 5, 1, 8, 6, 7]);
|
|
46
|
+
expect(minPQ1.dfs('POST')).toEqual([4, 3, 5, 2, 8, 7, 6, 1]);
|
|
47
|
+
expect(minPQ1.dfs('PRE')).toEqual([1, 2, 3, 4, 5, 6, 8, 7]);
|
|
48
48
|
});
|
|
49
49
|
});
|
|
50
50
|
|