data-structure-typed 1.50.6 → 1.50.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 +27 -24
- package/benchmark/report.html +1 -37
- package/benchmark/report.json +17 -395
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +2 -2
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +6 -4
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +3 -3
- package/dist/cjs/data-structures/binary-tree/binary-tree.js +36 -33
- package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/bst.d.ts +7 -5
- package/dist/cjs/data-structures/binary-tree/bst.js +68 -47
- package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +2 -8
- package/dist/cjs/data-structures/binary-tree/rb-tree.js +7 -17
- 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 +1 -2
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +1 -1
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
- package/dist/cjs/types/common.d.ts +5 -22
- package/dist/cjs/types/common.js +0 -33
- package/dist/cjs/types/common.js.map +1 -1
- package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +2 -2
- package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js +6 -4
- package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +3 -3
- package/dist/mjs/data-structures/binary-tree/binary-tree.js +36 -33
- package/dist/mjs/data-structures/binary-tree/bst.d.ts +7 -5
- package/dist/mjs/data-structures/binary-tree/bst.js +68 -47
- package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +2 -8
- package/dist/mjs/data-structures/binary-tree/rb-tree.js +7 -17
- package/dist/mjs/data-structures/binary-tree/tree-multi-map.d.ts +1 -2
- package/dist/mjs/data-structures/binary-tree/tree-multi-map.js +2 -2
- package/dist/mjs/types/common.d.ts +5 -22
- package/dist/mjs/types/common.js +1 -32
- package/dist/umd/data-structure-typed.js +112 -138
- 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 +8 -5
- package/src/data-structures/binary-tree/avl-tree.ts +1 -1
- package/src/data-structures/binary-tree/binary-tree.ts +35 -36
- package/src/data-structures/binary-tree/bst.ts +67 -44
- package/src/data-structures/binary-tree/rb-tree.ts +11 -22
- package/src/data-structures/binary-tree/tree-multi-map.ts +2 -2
- package/src/types/common.ts +6 -23
- package/test/integration/all-in-one.test.ts +2 -2
- package/test/integration/avl-tree.test.ts +1 -1
- package/test/integration/bst.test.ts +2 -2
- 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 +12 -17
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +4 -4
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +118 -65
- package/test/unit/data-structures/binary-tree/bst.test.ts +12 -12
- package/test/unit/data-structures/binary-tree/overall.test.ts +7 -7
- package/test/unit/data-structures/binary-tree/rb-tree.test.ts +272 -267
- package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +249 -245
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BinaryTree, BinaryTreeNode
|
|
1
|
+
import { BinaryTree, BinaryTreeNode } from '../../../../src';
|
|
2
2
|
import { getRandomIntArray } from '../../../utils';
|
|
3
3
|
// import { isDebugTest } from '../../../config';
|
|
4
4
|
|
|
@@ -81,7 +81,7 @@ describe('BinaryTreeNode', () => {
|
|
|
81
81
|
root.right = rightChild;
|
|
82
82
|
|
|
83
83
|
expect(rightChild.familyPosition).toBe('RIGHT');
|
|
84
|
-
expect(isolated.familyPosition).toBe(
|
|
84
|
+
expect(isolated.familyPosition).toBe('ISOLATED');
|
|
85
85
|
expect(root.familyPosition).toBe('ROOT');
|
|
86
86
|
});
|
|
87
87
|
});
|
|
@@ -104,7 +104,7 @@ describe('BinaryTree', () => {
|
|
|
104
104
|
});
|
|
105
105
|
|
|
106
106
|
it('should delete nodes', () => {
|
|
107
|
-
expect(tree.getHeight(tree.root,
|
|
107
|
+
expect(tree.getHeight(tree.root, 'ITERATIVE')).toBe(-1);
|
|
108
108
|
expect(tree.getMinHeight()).toBe(-1);
|
|
109
109
|
const node1 = tree.createNode(1);
|
|
110
110
|
tree.add(node1);
|
|
@@ -132,7 +132,7 @@ describe('BinaryTree', () => {
|
|
|
132
132
|
const result = tree.delete(node1);
|
|
133
133
|
expect(result).toHaveLength(1);
|
|
134
134
|
expect(tree.size).toBe(4);
|
|
135
|
-
expect(tree.getMinHeight(tree.root,
|
|
135
|
+
expect(tree.getMinHeight(tree.root, 'RECURSIVE')).toBe(1);
|
|
136
136
|
}
|
|
137
137
|
});
|
|
138
138
|
|
|
@@ -171,16 +171,25 @@ describe('BinaryTree', () => {
|
|
|
171
171
|
expect(cloned.root?.right?.key).toBe(6);
|
|
172
172
|
expect(cloned.root?.right?.left?.key).toBe(3);
|
|
173
173
|
expect(cloned.root?.right?.right).toBe(null);
|
|
174
|
-
expect(cloned.dfs(node => node.key, 'pre', cloned.getNode(6),
|
|
175
|
-
expect(
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
expect(
|
|
182
|
-
|
|
183
|
-
|
|
174
|
+
expect(cloned.dfs(node => node.key, 'pre', cloned.getNode(6), 'ITERATIVE')).toEqual([6, 3, 7]);
|
|
175
|
+
expect(cloned.dfs(node => (node ? node.key : null), 'pre', cloned.getNode(6), 'ITERATIVE', true)).toEqual([
|
|
176
|
+
6,
|
|
177
|
+
3,
|
|
178
|
+
7,
|
|
179
|
+
null
|
|
180
|
+
]);
|
|
181
|
+
expect(cloned.dfs(node => (node ? node.key : node), 'pre', cloned.getNode(6), 'ITERATIVE', true)).toEqual([
|
|
182
|
+
6,
|
|
183
|
+
3,
|
|
184
|
+
7,
|
|
185
|
+
null
|
|
186
|
+
]);
|
|
187
|
+
expect(cloned.dfs(node => (node ? node.key : null), 'pre', cloned.getNode(6), 'RECURSIVE', true)).toEqual([
|
|
188
|
+
6,
|
|
189
|
+
3,
|
|
190
|
+
7,
|
|
191
|
+
null
|
|
192
|
+
]);
|
|
184
193
|
cloned.delete(6);
|
|
185
194
|
cloned.delete(3);
|
|
186
195
|
cloned.delete(7);
|
|
@@ -234,9 +243,9 @@ describe('BinaryTree', () => {
|
|
|
234
243
|
tree.add(4);
|
|
235
244
|
tree.add(2);
|
|
236
245
|
expect(tree.getHeight()).toBe(1);
|
|
237
|
-
tree.iterationType =
|
|
246
|
+
tree.iterationType = 'RECURSIVE';
|
|
238
247
|
expect(tree.getHeight()).toBe(1);
|
|
239
|
-
tree.iterationType =
|
|
248
|
+
tree.iterationType = 'ITERATIVE';
|
|
240
249
|
|
|
241
250
|
tree.add(6);
|
|
242
251
|
tree.add(1);
|
|
@@ -252,9 +261,9 @@ describe('BinaryTree', () => {
|
|
|
252
261
|
it('should getLeftMost', () => {
|
|
253
262
|
tree.addMany([4, 2, 6, 1, 3, 5, 7]);
|
|
254
263
|
|
|
255
|
-
const leftMost = tree.getLeftMost(tree.root,
|
|
264
|
+
const leftMost = tree.getLeftMost(tree.root, 'RECURSIVE');
|
|
256
265
|
expect(leftMost?.key).toEqual(1);
|
|
257
|
-
const rightMost = tree.getRightMost(tree.root,
|
|
266
|
+
const rightMost = tree.getRightMost(tree.root, 'RECURSIVE');
|
|
258
267
|
expect(rightMost?.key).toEqual(7);
|
|
259
268
|
});
|
|
260
269
|
|
|
@@ -270,37 +279,37 @@ describe('BinaryTree', () => {
|
|
|
270
279
|
new BinaryTreeNode(4, 4)
|
|
271
280
|
]);
|
|
272
281
|
|
|
273
|
-
expect(tree.isBST(tree.getNode(4),
|
|
274
|
-
expect(tree.isBST(tree.getNode(4),
|
|
282
|
+
expect(tree.isBST(tree.getNode(4), 'RECURSIVE')).toBe(true);
|
|
283
|
+
expect(tree.isBST(tree.getNode(4), 'ITERATIVE')).toBe(true);
|
|
275
284
|
});
|
|
276
285
|
|
|
277
286
|
it('should isSubtreeBST', () => {
|
|
278
287
|
tree.addMany([4, 2, 6, 1, 3, 5, 7, 4]);
|
|
279
288
|
|
|
280
|
-
expect(tree.isBST(tree.getNode(4),
|
|
281
|
-
expect(tree.isBST(tree.getNode(4),
|
|
289
|
+
expect(tree.isBST(tree.getNode(4), 'RECURSIVE')).toBe(true);
|
|
290
|
+
expect(tree.isBST(tree.getNode(4), 'ITERATIVE')).toBe(true);
|
|
282
291
|
expect(tree.getNodes(2, undefined, false, null)).toEqual([]);
|
|
283
292
|
expect(tree.getNodes(tree.getNodeByKey(2), undefined, false, tree.root)).toEqual([tree.getNodeByKey(2)]);
|
|
284
293
|
});
|
|
285
294
|
|
|
286
295
|
it('should sub tree traverse', () => {
|
|
287
296
|
tree.addMany([4, 2, 6, null, 1, 3, null, 5, null, 7]);
|
|
288
|
-
expect(tree.dfs(node => node.key, 'pre', tree.getNode(6),
|
|
289
|
-
expect(tree.dfs(node => node.key, 'pre', tree.getNode(6),
|
|
290
|
-
expect(tree.dfs(node => node.key, 'pre', tree.getNode(6),
|
|
291
|
-
expect(tree.dfs(node => (node ? node.key : null), 'pre', tree.getNode(6),
|
|
297
|
+
expect(tree.dfs(node => node.key, 'pre', tree.getNode(6), 'ITERATIVE')).toEqual([6, 3, 7]);
|
|
298
|
+
expect(tree.dfs(node => node.key, 'pre', tree.getNode(6), 'ITERATIVE', false)).toEqual([6, 3, 7]);
|
|
299
|
+
expect(tree.dfs(node => node.key, 'pre', tree.getNode(6), 'RECURSIVE')).toEqual([6, 3, 7]);
|
|
300
|
+
expect(tree.dfs(node => (node ? node.key : null), 'pre', tree.getNode(6), 'ITERATIVE', true)).toEqual([
|
|
292
301
|
6,
|
|
293
302
|
3,
|
|
294
303
|
7,
|
|
295
304
|
null
|
|
296
305
|
]);
|
|
297
|
-
expect(tree.dfs(node => (node ? node.key : node), 'pre', tree.getNode(6),
|
|
306
|
+
expect(tree.dfs(node => (node ? node.key : node), 'pre', tree.getNode(6), 'ITERATIVE', true)).toEqual([
|
|
298
307
|
6,
|
|
299
308
|
3,
|
|
300
309
|
7,
|
|
301
310
|
null
|
|
302
311
|
]);
|
|
303
|
-
expect(tree.dfs(node => (node ? node.key : null), 'pre', tree.getNode(6),
|
|
312
|
+
expect(tree.dfs(node => (node ? node.key : null), 'pre', tree.getNode(6), 'RECURSIVE', true)).toEqual([
|
|
304
313
|
6,
|
|
305
314
|
3,
|
|
306
315
|
7,
|
|
@@ -360,7 +369,7 @@ describe('BinaryTree Morris Traversal', () => {
|
|
|
360
369
|
|
|
361
370
|
expect(result).toEqual(expected);
|
|
362
371
|
expect(tree.dfs(node => node.key, 'in')).toEqual(expected);
|
|
363
|
-
expect(tree.dfs(node => node.key, 'in', tree.root,
|
|
372
|
+
expect(tree.dfs(node => node.key, 'in', tree.root, 'RECURSIVE')).toEqual(expected);
|
|
364
373
|
});
|
|
365
374
|
|
|
366
375
|
it('should perform pre-order Morris traversal correctly as dfs traversal', () => {
|
|
@@ -399,57 +408,101 @@ describe('BinaryTree traversals', () => {
|
|
|
399
408
|
|
|
400
409
|
const arr = [35, 20, 40, 15, 29, null, 50, null, 16, 28, 30, 45, 55];
|
|
401
410
|
tree.refill(arr);
|
|
402
|
-
expect(
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
411
|
+
expect(tree.bfs(node => node, tree.root, 'ITERATIVE', true).map(node => (node ? node.key : null))).toEqual([
|
|
412
|
+
35,
|
|
413
|
+
20,
|
|
414
|
+
40,
|
|
415
|
+
15,
|
|
416
|
+
29,
|
|
417
|
+
null,
|
|
418
|
+
50,
|
|
419
|
+
null,
|
|
420
|
+
16,
|
|
421
|
+
28,
|
|
422
|
+
30,
|
|
423
|
+
45,
|
|
424
|
+
55
|
|
425
|
+
]);
|
|
426
|
+
expect(tree.bfs(node => node, tree.root, 'RECURSIVE', true).map(node => (node ? node.key : null))).toEqual([
|
|
427
|
+
35,
|
|
428
|
+
20,
|
|
429
|
+
40,
|
|
430
|
+
15,
|
|
431
|
+
29,
|
|
432
|
+
null,
|
|
433
|
+
50,
|
|
434
|
+
null,
|
|
435
|
+
16,
|
|
436
|
+
28,
|
|
437
|
+
30,
|
|
438
|
+
45,
|
|
439
|
+
55
|
|
440
|
+
]);
|
|
441
|
+
expect(tree.bfs(node => node, tree.root, 'ITERATIVE').map(node => (node === null ? null : node.key))).toEqual([
|
|
442
|
+
35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55
|
|
443
|
+
]);
|
|
444
|
+
expect(tree.bfs(node => node, tree.root, 'RECURSIVE').map(node => (node === null ? null : node.key))).toEqual([
|
|
445
|
+
35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55
|
|
446
|
+
]);
|
|
414
447
|
|
|
415
448
|
expect(tree.dfs(node => node.key, 'pre')).toEqual([35, 20, 15, 16, 29, 28, 30, 40, 50, 45, 55]);
|
|
416
|
-
expect(tree.dfs(node => node.key, 'pre', tree.root,
|
|
449
|
+
expect(tree.dfs(node => node.key, 'pre', tree.root, 'RECURSIVE')).toEqual([
|
|
417
450
|
35, 20, 15, 16, 29, 28, 30, 40, 50, 45, 55
|
|
418
451
|
]);
|
|
419
|
-
expect(
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
452
|
+
expect(tree.dfs(node => node, 'pre', tree.root, 'ITERATIVE', true).map(node => (node ? node.key : null))).toEqual([
|
|
453
|
+
35,
|
|
454
|
+
20,
|
|
455
|
+
15,
|
|
456
|
+
null,
|
|
457
|
+
16,
|
|
458
|
+
29,
|
|
459
|
+
28,
|
|
460
|
+
30,
|
|
461
|
+
40,
|
|
462
|
+
null,
|
|
463
|
+
50,
|
|
464
|
+
45,
|
|
465
|
+
55
|
|
466
|
+
]);
|
|
467
|
+
expect(tree.dfs(node => node, 'pre', tree.root, 'RECURSIVE', true).map(node => (node ? node.key : null))).toEqual([
|
|
468
|
+
35,
|
|
469
|
+
20,
|
|
470
|
+
15,
|
|
471
|
+
null,
|
|
472
|
+
16,
|
|
473
|
+
29,
|
|
474
|
+
28,
|
|
475
|
+
30,
|
|
476
|
+
40,
|
|
477
|
+
null,
|
|
478
|
+
50,
|
|
479
|
+
45,
|
|
480
|
+
55
|
|
481
|
+
]);
|
|
425
482
|
|
|
426
483
|
expect(tree.dfs(node => node.key, 'in')).toEqual([15, 16, 20, 28, 29, 30, 35, 40, 45, 50, 55]);
|
|
427
484
|
expect(tree.dfs(node => node.key, 'post')).toEqual([16, 15, 28, 30, 29, 20, 45, 55, 50, 40, 35]);
|
|
428
|
-
expect(tree.dfs(node => node.key, 'post', tree.root,
|
|
485
|
+
expect(tree.dfs(node => node.key, 'post', tree.root, 'RECURSIVE')).toEqual([
|
|
429
486
|
16, 15, 28, 30, 29, 20, 45, 55, 50, 40, 35
|
|
430
487
|
]);
|
|
431
|
-
expect(tree.bfs(node => node.key, tree.root,
|
|
432
|
-
|
|
433
|
-
]);
|
|
434
|
-
expect(tree.bfs(node => node.key, tree.root, IterationType.ITERATIVE)).toEqual([
|
|
435
|
-
35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55
|
|
436
|
-
]);
|
|
488
|
+
expect(tree.bfs(node => node.key, tree.root, 'RECURSIVE')).toEqual([35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55]);
|
|
489
|
+
expect(tree.bfs(node => node.key, tree.root, 'ITERATIVE')).toEqual([35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55]);
|
|
437
490
|
|
|
438
491
|
expect(tree.listLevels(node => node.key)).toEqual([[35], [20, 40], [15, 29, 50], [16, 28, 30, 45, 55]]);
|
|
439
492
|
|
|
440
|
-
expect(tree.listLevels(node => node.key, tree.root,
|
|
493
|
+
expect(tree.listLevels(node => node.key, tree.root, 'RECURSIVE')).toEqual([
|
|
441
494
|
[35],
|
|
442
495
|
[20, 40],
|
|
443
496
|
[15, 29, 50],
|
|
444
497
|
[16, 28, 30, 45, 55]
|
|
445
498
|
]);
|
|
446
|
-
expect(tree.listLevels(node => (node ? node.key : null), tree.root,
|
|
499
|
+
expect(tree.listLevels(node => (node ? node.key : null), tree.root, 'ITERATIVE', true)).toEqual([
|
|
447
500
|
[35],
|
|
448
501
|
[20, 40],
|
|
449
502
|
[15, 29, null, 50],
|
|
450
503
|
[null, 16, 28, 30, 45, 55]
|
|
451
504
|
]);
|
|
452
|
-
expect(tree.listLevels(node => (node ? node.key : null), tree.root,
|
|
505
|
+
expect(tree.listLevels(node => (node ? node.key : null), tree.root, 'RECURSIVE', true)).toEqual([
|
|
453
506
|
[35],
|
|
454
507
|
[20, 40],
|
|
455
508
|
[15, 29, null, 50],
|
|
@@ -461,7 +514,7 @@ describe('BinaryTree', () => {
|
|
|
461
514
|
let tree: BinaryTree<number, string>;
|
|
462
515
|
|
|
463
516
|
beforeEach(() => {
|
|
464
|
-
tree = new BinaryTree<number, string>([], { iterationType:
|
|
517
|
+
tree = new BinaryTree<number, string>([], { iterationType: 'RECURSIVE' });
|
|
465
518
|
});
|
|
466
519
|
|
|
467
520
|
afterEach(() => {
|
|
@@ -533,8 +586,8 @@ describe('BinaryTree', () => {
|
|
|
533
586
|
tree.add([7, 'C']);
|
|
534
587
|
|
|
535
588
|
expect(tree.getHeight()).toBe(1);
|
|
536
|
-
expect(tree.getHeight(undefined,
|
|
537
|
-
expect(tree.getMinHeight(undefined,
|
|
589
|
+
expect(tree.getHeight(undefined, 'RECURSIVE')).toBe(1);
|
|
590
|
+
expect(tree.getMinHeight(undefined, 'RECURSIVE')).toBe(1);
|
|
538
591
|
});
|
|
539
592
|
|
|
540
593
|
it('should check if the tree is a binary search tree', () => {
|
|
@@ -604,7 +657,7 @@ describe('BinaryTree', () => {
|
|
|
604
657
|
expect(nodes.length).toBe(1);
|
|
605
658
|
expect(nodes[0].key).toBe(3);
|
|
606
659
|
|
|
607
|
-
const nodesRec = tree.getNodes('B', node => node.value, false, tree.root,
|
|
660
|
+
const nodesRec = tree.getNodes('B', node => node.value, false, tree.root, 'RECURSIVE');
|
|
608
661
|
|
|
609
662
|
expect(nodesRec.length).toBe(1);
|
|
610
663
|
expect(nodesRec[0].key).toBe(3);
|
|
@@ -615,19 +668,19 @@ describe('BinaryTree', () => {
|
|
|
615
668
|
tree.add([3, 'B']);
|
|
616
669
|
tree.add([7, 'C']);
|
|
617
670
|
|
|
618
|
-
tree.iterationType =
|
|
671
|
+
tree.iterationType = 'ITERATIVE';
|
|
619
672
|
expect([...tree]).toEqual([
|
|
620
673
|
[3, 'B'],
|
|
621
674
|
[5, 'A'],
|
|
622
675
|
[7, 'C']
|
|
623
676
|
]);
|
|
624
|
-
tree.iterationType =
|
|
677
|
+
tree.iterationType = 'RECURSIVE';
|
|
625
678
|
expect([...tree]).toEqual([
|
|
626
679
|
[3, 'B'],
|
|
627
680
|
[5, 'A'],
|
|
628
681
|
[7, 'C']
|
|
629
682
|
]);
|
|
630
|
-
tree.iterationType =
|
|
683
|
+
tree.iterationType = 'ITERATIVE';
|
|
631
684
|
|
|
632
685
|
const result = tree.morris();
|
|
633
686
|
expect(result).toEqual([3, 5, 7]);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BinaryTreeNode, BST, BSTNode
|
|
1
|
+
import { BinaryTreeNode, BST, BSTNode } from '../../../../src';
|
|
2
2
|
import { isDebugTest } from '../../../config';
|
|
3
3
|
|
|
4
4
|
const isDebug = isDebugTest;
|
|
@@ -58,7 +58,7 @@ describe('BST operations test', () => {
|
|
|
58
58
|
expect(subTreeSum).toBe(70);
|
|
59
59
|
|
|
60
60
|
let lesserSum = 0;
|
|
61
|
-
bst.lesserOrGreaterTraverse(node => (lesserSum += node.key),
|
|
61
|
+
bst.lesserOrGreaterTraverse(node => (lesserSum += node.key), 'LT', 10);
|
|
62
62
|
expect(lesserSum).toBe(45);
|
|
63
63
|
|
|
64
64
|
expect(node15).toBeInstanceOf(BSTNode);
|
|
@@ -261,7 +261,7 @@ describe('BST operations test', () => {
|
|
|
261
261
|
expect(subTreeSum).toBe(70);
|
|
262
262
|
|
|
263
263
|
let lesserSum = 0;
|
|
264
|
-
objBST.lesserOrGreaterTraverse(node => (lesserSum += node.key),
|
|
264
|
+
objBST.lesserOrGreaterTraverse(node => (lesserSum += node.key), 'LT', 10);
|
|
265
265
|
expect(lesserSum).toBe(45);
|
|
266
266
|
|
|
267
267
|
expect(node15).toBeInstanceOf(BSTNode);
|
|
@@ -411,7 +411,7 @@ describe('BST operations test', () => {
|
|
|
411
411
|
|
|
412
412
|
describe('BST operations test recursively', () => {
|
|
413
413
|
it('should perform various operations on a Binary Search Tree with numeric values', () => {
|
|
414
|
-
const bst = new BST<number>([], { iterationType:
|
|
414
|
+
const bst = new BST<number>([], { iterationType: 'RECURSIVE' });
|
|
415
415
|
expect(bst).toBeInstanceOf(BST);
|
|
416
416
|
bst.add([11, 11]);
|
|
417
417
|
bst.add([3, 3]);
|
|
@@ -448,7 +448,7 @@ describe('BST operations test recursively', () => {
|
|
|
448
448
|
expect(subTreeSum).toBe(70);
|
|
449
449
|
|
|
450
450
|
let lesserSum = 0;
|
|
451
|
-
bst.lesserOrGreaterTraverse(node => (lesserSum += node.key),
|
|
451
|
+
bst.lesserOrGreaterTraverse(node => (lesserSum += node.key), 'LT', 10);
|
|
452
452
|
expect(lesserSum).toBe(45);
|
|
453
453
|
|
|
454
454
|
expect(node15).toBeInstanceOf(BSTNode);
|
|
@@ -649,7 +649,7 @@ describe('BST operations test recursively', () => {
|
|
|
649
649
|
expect(subTreeSum).toBe(70);
|
|
650
650
|
|
|
651
651
|
let lesserSum = 0;
|
|
652
|
-
objBST.lesserOrGreaterTraverse(node => (lesserSum += node.key),
|
|
652
|
+
objBST.lesserOrGreaterTraverse(node => (lesserSum += node.key), 'LT', 10);
|
|
653
653
|
expect(lesserSum).toBe(45);
|
|
654
654
|
|
|
655
655
|
expect(node15).toBeInstanceOf(BSTNode);
|
|
@@ -869,7 +869,7 @@ describe('BST isBST', function () {
|
|
|
869
869
|
});
|
|
870
870
|
|
|
871
871
|
test('isBST when variant is Max', () => {
|
|
872
|
-
const bst = new BST<number, number>([1, 2, 3, 9, 8, 5, 6, 7, 4], { variant:
|
|
872
|
+
const bst = new BST<number, number>([1, 2, 3, 9, 8, 5, 6, 7, 4], { variant: 'INVERSE' });
|
|
873
873
|
bst.addMany([1, 2, 3, 9, 8, 5, 6, 7, 4]);
|
|
874
874
|
expect(bst.isBST()).toBe(true);
|
|
875
875
|
});
|
|
@@ -902,7 +902,7 @@ describe('BST Performance test', function () {
|
|
|
902
902
|
node => {
|
|
903
903
|
node.key - 1;
|
|
904
904
|
},
|
|
905
|
-
|
|
905
|
+
'LT',
|
|
906
906
|
inputSize / 2
|
|
907
907
|
);
|
|
908
908
|
isDebug && console.log('---lesserOrGreaterTraverse', performance.now() - startL);
|
|
@@ -932,10 +932,10 @@ describe('BST Performance test', function () {
|
|
|
932
932
|
it('should dfs as sub tree traversal, null should be ignored', () => {
|
|
933
933
|
const bst = new BST();
|
|
934
934
|
bst.addMany([4, 2, 6, 1, 3, 5, 7]);
|
|
935
|
-
expect(bst.dfs(node => node.key, 'pre', bst.getNode(6),
|
|
936
|
-
expect(bst.dfs(node => node.key, 'pre', bst.getNode(6),
|
|
937
|
-
expect(bst.dfs(node => node?.key ?? undefined, 'pre', bst.getNode(6),
|
|
938
|
-
expect(bst.dfs(node => node?.key ?? undefined, 'pre', bst.getNode(6),
|
|
935
|
+
expect(bst.dfs(node => node.key, 'pre', bst.getNode(6), 'ITERATIVE')).toEqual([6, 5, 7]);
|
|
936
|
+
expect(bst.dfs(node => node.key, 'pre', bst.getNode(6), 'RECURSIVE')).toEqual([6, 5, 7]);
|
|
937
|
+
expect(bst.dfs(node => node?.key ?? undefined, 'pre', bst.getNode(6), 'ITERATIVE')).toEqual([6, 5, 7]);
|
|
938
|
+
expect(bst.dfs(node => node?.key ?? undefined, 'pre', bst.getNode(6), 'RECURSIVE')).toEqual([6, 5, 7]);
|
|
939
939
|
});
|
|
940
940
|
});
|
|
941
941
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AVLTree, BST,
|
|
1
|
+
import { AVLTree, BST, RedBlackTree, TreeMultiMap } from '../../../../src';
|
|
2
2
|
|
|
3
3
|
describe('Overall BinaryTree Test', () => {
|
|
4
4
|
it('should perform various operations on BinaryTree', () => {
|
|
@@ -63,8 +63,8 @@ describe('Overall BinaryTree Test', () => {
|
|
|
63
63
|
|
|
64
64
|
it('Should clone a BST works fine', () => {
|
|
65
65
|
const bst = new BST<number>([3, 6, 7, 1, 9], {
|
|
66
|
-
iterationType:
|
|
67
|
-
variant:
|
|
66
|
+
iterationType: 'RECURSIVE',
|
|
67
|
+
variant: 'INVERSE',
|
|
68
68
|
extractor: key => key
|
|
69
69
|
});
|
|
70
70
|
expect(bst.size).toBe(5);
|
|
@@ -104,8 +104,8 @@ describe('Overall BinaryTree Test', () => {
|
|
|
104
104
|
|
|
105
105
|
it('Should clone a AVLTree works fine', () => {
|
|
106
106
|
const avl = new AVLTree<number>([3, 6, 7, 1, 9], {
|
|
107
|
-
iterationType:
|
|
108
|
-
variant:
|
|
107
|
+
iterationType: 'RECURSIVE',
|
|
108
|
+
variant: 'INVERSE',
|
|
109
109
|
extractor: key => key
|
|
110
110
|
});
|
|
111
111
|
expect(avl.size).toBe(5);
|
|
@@ -148,7 +148,7 @@ describe('Overall BinaryTree Test', () => {
|
|
|
148
148
|
|
|
149
149
|
it('Should clone a TreeMultiMap works fine', () => {
|
|
150
150
|
const tmm = new TreeMultiMap<number>([3, 6, 7, 1, 9], {
|
|
151
|
-
iterationType:
|
|
151
|
+
iterationType: 'RECURSIVE',
|
|
152
152
|
extractor: key => key
|
|
153
153
|
});
|
|
154
154
|
expect(tmm.size).toBe(5);
|
|
@@ -197,7 +197,7 @@ describe('Overall BinaryTree Test', () => {
|
|
|
197
197
|
|
|
198
198
|
it('Should clone a RedBlackTree works fine', () => {
|
|
199
199
|
const rbTree = new RedBlackTree<number>([3, 6, 7, 1, 9], {
|
|
200
|
-
iterationType:
|
|
200
|
+
iterationType: 'RECURSIVE',
|
|
201
201
|
extractor: key => key
|
|
202
202
|
});
|
|
203
203
|
expect(rbTree.size).toBe(5);
|