data-structure-typed 1.39.0 → 1.39.1

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.
Files changed (115) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +2 -2
  3. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  4. package/dist/cjs/data-structures/binary-tree/binary-indexed-tree.js.map +1 -1
  5. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +86 -32
  6. package/dist/cjs/data-structures/binary-tree/binary-tree.js +8 -8
  7. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  8. package/dist/cjs/data-structures/binary-tree/bst.d.ts +6 -6
  9. package/dist/cjs/data-structures/binary-tree/bst.js +2 -2
  10. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  11. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
  12. package/dist/cjs/data-structures/binary-tree/tree-multiset.d.ts +2 -2
  13. package/dist/cjs/data-structures/binary-tree/tree-multiset.js.map +1 -1
  14. package/dist/cjs/data-structures/graph/abstract-graph.d.ts +1 -1
  15. package/dist/cjs/data-structures/graph/abstract-graph.js +1 -1
  16. package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
  17. package/dist/cjs/data-structures/graph/directed-graph.js.map +1 -1
  18. package/dist/cjs/data-structures/graph/map-graph.d.ts +1 -1
  19. package/dist/cjs/data-structures/graph/map-graph.js +1 -1
  20. package/dist/cjs/data-structures/graph/map-graph.js.map +1 -1
  21. package/dist/cjs/data-structures/graph/undirected-graph.js.map +1 -1
  22. package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
  23. package/dist/cjs/data-structures/hash/tree-map.js.map +1 -1
  24. package/dist/cjs/data-structures/hash/tree-set.js.map +1 -1
  25. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  26. package/dist/cjs/data-structures/heap/max-heap.js.map +1 -1
  27. package/dist/cjs/data-structures/heap/min-heap.js.map +1 -1
  28. package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
  29. package/dist/cjs/data-structures/matrix/matrix.js.map +1 -1
  30. package/dist/cjs/data-structures/matrix/matrix2d.d.ts +1 -2
  31. package/dist/cjs/data-structures/matrix/matrix2d.js +3 -7
  32. package/dist/cjs/data-structures/matrix/matrix2d.js.map +1 -1
  33. package/dist/cjs/data-structures/matrix/vector2d.d.ts +0 -1
  34. package/dist/cjs/data-structures/matrix/vector2d.js +0 -1
  35. package/dist/cjs/data-structures/matrix/vector2d.js.map +1 -1
  36. package/dist/cjs/data-structures/priority-queue/max-priority-queue.js.map +1 -1
  37. package/dist/cjs/data-structures/priority-queue/min-priority-queue.js.map +1 -1
  38. package/dist/cjs/data-structures/priority-queue/priority-queue.js.map +1 -1
  39. package/dist/cjs/data-structures/queue/deque.js.map +1 -1
  40. package/dist/cjs/data-structures/queue/queue.js.map +1 -1
  41. package/dist/cjs/interfaces/binary-tree.d.ts +2 -2
  42. package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +0 -2
  43. package/dist/cjs/types/helpers.d.ts +1 -4
  44. package/dist/cjs/types/helpers.js.map +1 -1
  45. package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +2 -2
  46. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +86 -32
  47. package/dist/mjs/data-structures/binary-tree/binary-tree.js +8 -8
  48. package/dist/mjs/data-structures/binary-tree/bst.d.ts +6 -6
  49. package/dist/mjs/data-structures/binary-tree/bst.js +2 -2
  50. package/dist/mjs/data-structures/binary-tree/tree-multiset.d.ts +2 -2
  51. package/dist/mjs/data-structures/graph/abstract-graph.d.ts +1 -1
  52. package/dist/mjs/data-structures/graph/abstract-graph.js +1 -1
  53. package/dist/mjs/data-structures/graph/map-graph.d.ts +1 -1
  54. package/dist/mjs/data-structures/graph/map-graph.js +1 -1
  55. package/dist/mjs/data-structures/matrix/matrix2d.d.ts +1 -2
  56. package/dist/mjs/data-structures/matrix/matrix2d.js +3 -7
  57. package/dist/mjs/data-structures/matrix/vector2d.d.ts +0 -1
  58. package/dist/mjs/data-structures/matrix/vector2d.js +0 -1
  59. package/dist/mjs/interfaces/binary-tree.d.ts +2 -2
  60. package/dist/mjs/types/data-structures/binary-tree/binary-tree.d.ts +0 -2
  61. package/dist/mjs/types/helpers.d.ts +1 -4
  62. package/dist/umd/data-structure-typed.min.js +1 -1
  63. package/dist/umd/data-structure-typed.min.js.map +1 -1
  64. package/package.json +5 -5
  65. package/src/data-structures/binary-tree/avl-tree.ts +5 -4
  66. package/src/data-structures/binary-tree/binary-indexed-tree.ts +1 -1
  67. package/src/data-structures/binary-tree/binary-tree.ts +37 -93
  68. package/src/data-structures/binary-tree/bst.ts +11 -17
  69. package/src/data-structures/binary-tree/rb-tree.ts +2 -1
  70. package/src/data-structures/binary-tree/tree-multiset.ts +4 -3
  71. package/src/data-structures/graph/abstract-graph.ts +12 -11
  72. package/src/data-structures/graph/directed-graph.ts +2 -1
  73. package/src/data-structures/graph/map-graph.ts +2 -2
  74. package/src/data-structures/graph/undirected-graph.ts +5 -4
  75. package/src/data-structures/hash/hash-map.ts +1 -1
  76. package/src/data-structures/hash/tree-map.ts +1 -2
  77. package/src/data-structures/hash/tree-set.ts +1 -2
  78. package/src/data-structures/heap/heap.ts +2 -2
  79. package/src/data-structures/heap/max-heap.ts +1 -1
  80. package/src/data-structures/heap/min-heap.ts +1 -1
  81. package/src/data-structures/linked-list/singly-linked-list.ts +1 -1
  82. package/src/data-structures/matrix/matrix.ts +1 -1
  83. package/src/data-structures/matrix/matrix2d.ts +1 -3
  84. package/src/data-structures/matrix/vector2d.ts +1 -4
  85. package/src/data-structures/priority-queue/max-priority-queue.ts +1 -1
  86. package/src/data-structures/priority-queue/min-priority-queue.ts +1 -1
  87. package/src/data-structures/priority-queue/priority-queue.ts +1 -1
  88. package/src/data-structures/queue/deque.ts +4 -5
  89. package/src/data-structures/queue/queue.ts +1 -1
  90. package/src/interfaces/binary-tree.ts +2 -2
  91. package/src/types/data-structures/binary-tree/binary-tree.ts +0 -4
  92. package/src/types/data-structures/matrix/navigator.ts +1 -1
  93. package/src/types/helpers.ts +1 -7
  94. package/src/types/utils/utils.ts +1 -1
  95. package/src/types/utils/validate-type.ts +2 -2
  96. package/test/integration/bst.test.ts +1 -1
  97. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +142 -2
  98. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +270 -48
  99. package/test/unit/data-structures/binary-tree/bst.test.ts +394 -4
  100. package/test/unit/data-structures/binary-tree/overall.test.ts +1 -1
  101. package/test/unit/data-structures/binary-tree/rb-tree.test.ts +73 -7
  102. package/test/unit/data-structures/binary-tree/tree-multiset.test.ts +242 -187
  103. package/test/unit/data-structures/graph/directed-graph.test.ts +34 -4
  104. package/test/unit/data-structures/graph/map-graph.test.ts +82 -1
  105. package/test/unit/data-structures/graph/undirected-graph.test.ts +82 -0
  106. package/test/unit/data-structures/heap/heap.test.ts +2 -2
  107. package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +1 -1
  108. package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +3 -3
  109. package/test/unit/data-structures/matrix/matrix2d.test.ts +207 -0
  110. package/test/unit/data-structures/matrix/navigator.test.ts +166 -1
  111. package/test/unit/data-structures/matrix/vector2d.test.ts +171 -0
  112. package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +2 -2
  113. package/test/unit/data-structures/queue/deque.test.ts +264 -1
  114. package/test/unit/data-structures/queue/queue.test.ts +3 -1
  115. package/test/utils/big-o.ts +1 -1
@@ -1,4 +1,4 @@
1
- import {BST, BSTNode, CP} from '../../../../src';
1
+ import {BST, BSTNode, CP, IterationType} from '../../../../src';
2
2
  import {isDebugTest} from '../../../config';
3
3
 
4
4
  const isDebug = isDebugTest;
@@ -189,7 +189,7 @@ describe('BST operations test', () => {
189
189
  });
190
190
 
191
191
  it('should perform various operations on a Binary Search Tree with object values', () => {
192
- const objBST = new BST<{ key: number; keyA: number }>();
192
+ const objBST = new BST<{key: number; keyA: number}>();
193
193
  expect(objBST).toBeInstanceOf(BST);
194
194
  objBST.add(11, {key: 11, keyA: 11});
195
195
  objBST.add(3, {key: 3, keyA: 3});
@@ -260,7 +260,7 @@ describe('BST operations test', () => {
260
260
  objBST.perfectlyBalance();
261
261
  expect(objBST.isPerfectlyBalanced()).toBe(true);
262
262
 
263
- const bfsNodesAfterBalanced: BSTNode<{ key: number; keyA: number }>[] = [];
263
+ const bfsNodesAfterBalanced: BSTNode<{key: number; keyA: number}>[] = [];
264
264
  objBST.bfs(node => bfsNodesAfterBalanced.push(node));
265
265
  expect(bfsNodesAfterBalanced[0].key).toBe(8);
266
266
  expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16);
@@ -385,7 +385,397 @@ describe('BST operations test', () => {
385
385
  expect(bfsIDs[1]).toBe(12);
386
386
  expect(bfsIDs[2]).toBe(16);
387
387
 
388
- const bfsNodes: BSTNode<{ key: number; keyA: number }>[] = [];
388
+ const bfsNodes: BSTNode<{key: number; keyA: number}>[] = [];
389
+ objBST.bfs(node => bfsNodes.push(node));
390
+ expect(bfsNodes[0].key).toBe(2);
391
+ expect(bfsNodes[1].key).toBe(12);
392
+ expect(bfsNodes[2].key).toBe(16);
393
+ });
394
+ });
395
+
396
+ describe('BST operations test recursively', () => {
397
+ it('should perform various operations on a Binary Search Tree with numeric values', () => {
398
+ const bst = new BST({iterationType: IterationType.RECURSIVE});
399
+ expect(bst).toBeInstanceOf(BST);
400
+ bst.add(11, 11);
401
+ bst.add(3, 3);
402
+ const idsAndValues = [15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];
403
+ bst.addMany(idsAndValues, idsAndValues, false);
404
+ expect(bst.root).toBeInstanceOf(BSTNode);
405
+
406
+ if (bst.root) expect(bst.root.key).toBe(11);
407
+
408
+ expect(bst.size).toBe(16);
409
+
410
+ expect(bst.has(6)).toBe(true);
411
+
412
+ const node6 = bst.get(6);
413
+ expect(node6 && bst.getHeight(6)).toBe(2);
414
+ expect(node6 && bst.getDepth(6)).toBe(3);
415
+
416
+ const nodeId10 = bst.get(10);
417
+ expect(nodeId10?.key).toBe(10);
418
+
419
+ const nodeVal9 = bst.get(9, node => node.val);
420
+ expect(nodeVal9?.key).toBe(9);
421
+
422
+ const leftMost = bst.getLeftMost();
423
+ expect(leftMost?.key).toBe(1);
424
+
425
+ const node15 = bst.get(15);
426
+ const minNodeBySpecificNode = node15 && bst.getLeftMost(node15);
427
+ expect(minNodeBySpecificNode?.key).toBe(12);
428
+
429
+ let subTreeSum = 0;
430
+ node15 && bst.subTreeTraverse(node => (subTreeSum += node.key), 15);
431
+ expect(subTreeSum).toBe(70);
432
+
433
+ let lesserSum = 0;
434
+ bst.lesserOrGreaterTraverse(node => (lesserSum += node.key), CP.lt, 10);
435
+ expect(lesserSum).toBe(45);
436
+
437
+ expect(node15).toBeInstanceOf(BSTNode);
438
+
439
+ const node11 = bst.get(11);
440
+ expect(node11).toBeInstanceOf(BSTNode);
441
+
442
+ const dfsInorderNodes = bst.dfs(node => node, 'in');
443
+ expect(dfsInorderNodes[0].key).toBe(1);
444
+ expect(dfsInorderNodes[dfsInorderNodes.length - 1].key).toBe(16);
445
+
446
+ bst.perfectlyBalance();
447
+ expect(bst.isPerfectlyBalanced()).toBe(true);
448
+
449
+ const bfsNodesAfterBalanced: BSTNode<number>[] = [];
450
+ bst.bfs(node => bfsNodesAfterBalanced.push(node));
451
+ expect(bfsNodesAfterBalanced[0].key).toBe(8);
452
+ expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16);
453
+
454
+ const removed11 = bst.delete(11);
455
+ expect(removed11).toBeInstanceOf(Array);
456
+ expect(removed11[0]).toBeDefined();
457
+ expect(removed11[0].deleted).toBeDefined();
458
+
459
+ if (removed11[0].deleted) expect(removed11[0].deleted.key).toBe(11);
460
+
461
+ expect(bst.isAVLBalanced()).toBe(true);
462
+
463
+ expect(bst.getHeight(15)).toBe(1);
464
+
465
+ const removed1 = bst.delete(1);
466
+ expect(removed1).toBeInstanceOf(Array);
467
+ expect(removed1[0]).toBeDefined();
468
+ expect(removed1[0].deleted).toBeDefined();
469
+ if (removed1[0].deleted) expect(removed1[0].deleted.key).toBe(1);
470
+
471
+ expect(bst.isAVLBalanced()).toBe(true);
472
+
473
+ expect(bst.getHeight()).toBe(4);
474
+
475
+ const removed4 = bst.delete(4);
476
+ expect(removed4).toBeInstanceOf(Array);
477
+ expect(removed4[0]).toBeDefined();
478
+ expect(removed4[0].deleted).toBeDefined();
479
+ if (removed4[0].deleted) expect(removed4[0].deleted.key).toBe(4);
480
+ expect(bst.isAVLBalanced()).toBe(true);
481
+ expect(bst.getHeight()).toBe(4);
482
+
483
+ const removed10 = bst.delete(10);
484
+ expect(removed10).toBeInstanceOf(Array);
485
+ expect(removed10[0]).toBeDefined();
486
+ expect(removed10[0].deleted).toBeDefined();
487
+ if (removed10[0].deleted) expect(removed10[0].deleted.key).toBe(10);
488
+ expect(bst.isAVLBalanced()).toBe(false);
489
+ expect(bst.getHeight()).toBe(4);
490
+
491
+ const removed15 = bst.delete(15);
492
+ expect(removed15).toBeInstanceOf(Array);
493
+ expect(removed15[0]).toBeDefined();
494
+ expect(removed15[0].deleted).toBeDefined();
495
+ if (removed15[0].deleted) expect(removed15[0].deleted.key).toBe(15);
496
+
497
+ expect(bst.isAVLBalanced()).toBe(true);
498
+ expect(bst.getHeight()).toBe(3);
499
+
500
+ const removed5 = bst.delete(5);
501
+ expect(removed5).toBeInstanceOf(Array);
502
+ expect(removed5[0]).toBeDefined();
503
+ expect(removed5[0].deleted).toBeDefined();
504
+ if (removed5[0].deleted) expect(removed5[0].deleted.key).toBe(5);
505
+
506
+ expect(bst.isAVLBalanced()).toBe(true);
507
+ expect(bst.getHeight()).toBe(3);
508
+
509
+ const removed13 = bst.delete(13);
510
+ expect(removed13).toBeInstanceOf(Array);
511
+ expect(removed13[0]).toBeDefined();
512
+ expect(removed13[0].deleted).toBeDefined();
513
+ if (removed13[0].deleted) expect(removed13[0].deleted.key).toBe(13);
514
+ expect(bst.isAVLBalanced()).toBe(true);
515
+ expect(bst.getHeight()).toBe(3);
516
+
517
+ const removed3 = bst.delete(3);
518
+ expect(removed3).toBeInstanceOf(Array);
519
+ expect(removed3[0]).toBeDefined();
520
+ expect(removed3[0].deleted).toBeDefined();
521
+ if (removed3[0].deleted) expect(removed3[0].deleted.key).toBe(3);
522
+ expect(bst.isAVLBalanced()).toBe(false);
523
+ expect(bst.getHeight()).toBe(3);
524
+
525
+ const removed8 = bst.delete(8);
526
+ expect(removed8).toBeInstanceOf(Array);
527
+ expect(removed8[0]).toBeDefined();
528
+ expect(removed8[0].deleted).toBeDefined();
529
+ if (removed8[0].deleted) expect(removed8[0].deleted.key).toBe(8);
530
+ expect(bst.isAVLBalanced()).toBe(true);
531
+ expect(bst.getHeight()).toBe(3);
532
+
533
+ const removed6 = bst.delete(6);
534
+ expect(removed6).toBeInstanceOf(Array);
535
+ expect(removed6[0]).toBeDefined();
536
+ expect(removed6[0].deleted).toBeDefined();
537
+ if (removed6[0].deleted) expect(removed6[0].deleted.key).toBe(6);
538
+ expect(bst.delete(6).length).toBe(0);
539
+ expect(bst.isAVLBalanced()).toBe(false);
540
+ expect(bst.getHeight()).toBe(3);
541
+
542
+ const removed7 = bst.delete(7);
543
+ expect(removed7).toBeInstanceOf(Array);
544
+ expect(removed7[0]).toBeDefined();
545
+ expect(removed7[0].deleted).toBeDefined();
546
+ if (removed7[0].deleted) expect(removed7[0].deleted.key).toBe(7);
547
+ expect(bst.isAVLBalanced()).toBe(false);
548
+ expect(bst.getHeight()).toBe(3);
549
+
550
+ const removed9 = bst.delete(9);
551
+ expect(removed9).toBeInstanceOf(Array);
552
+ expect(removed9[0]).toBeDefined();
553
+ expect(removed9[0].deleted).toBeDefined();
554
+ if (removed9[0].deleted) expect(removed9[0].deleted.key).toBe(9);
555
+ expect(bst.isAVLBalanced()).toBe(false);
556
+ expect(bst.getHeight()).toBe(3);
557
+
558
+ const removed14 = bst.delete(14);
559
+ expect(removed14).toBeInstanceOf(Array);
560
+ expect(removed14[0]).toBeDefined();
561
+ expect(removed14[0].deleted).toBeDefined();
562
+ if (removed14[0].deleted) expect(removed14[0].deleted.key).toBe(14);
563
+ expect(bst.isAVLBalanced()).toBe(false);
564
+ expect(bst.getHeight()).toBe(2);
565
+
566
+ expect(bst.isAVLBalanced()).toBe(false);
567
+
568
+ const bfsIDs: number[] = [];
569
+ bst.bfs(node => bfsIDs.push(node.key));
570
+ expect(bfsIDs[0]).toBe(2);
571
+ expect(bfsIDs[1]).toBe(12);
572
+ expect(bfsIDs[2]).toBe(16);
573
+
574
+ const bfsNodes: BSTNode<number>[] = [];
575
+ bst.bfs(node => bfsNodes.push(node));
576
+ expect(bfsNodes[0].key).toBe(2);
577
+ expect(bfsNodes[1].key).toBe(12);
578
+ expect(bfsNodes[2].key).toBe(16);
579
+ });
580
+
581
+ it('should perform various operations on a Binary Search Tree with object values', () => {
582
+ const objBST = new BST<{key: number; keyA: number}>();
583
+ expect(objBST).toBeInstanceOf(BST);
584
+ objBST.add(11, {key: 11, keyA: 11});
585
+ objBST.add(3, {key: 3, keyA: 3});
586
+ const values = [
587
+ {key: 15, keyA: 15},
588
+ {key: 1, keyA: 1},
589
+ {key: 8, keyA: 8},
590
+ {key: 13, keyA: 13},
591
+ {key: 16, keyA: 16},
592
+ {key: 2, keyA: 2},
593
+ {key: 6, keyA: 6},
594
+ {key: 9, keyA: 9},
595
+ {key: 12, keyA: 12},
596
+ {key: 14, keyA: 14},
597
+ {key: 4, keyA: 4},
598
+ {key: 7, keyA: 7},
599
+ {key: 10, keyA: 10},
600
+ {key: 5, keyA: 5}
601
+ ];
602
+
603
+ objBST.addMany(
604
+ values.map(item => item.key),
605
+ values,
606
+ false
607
+ );
608
+
609
+ expect(objBST.root).toBeInstanceOf(BSTNode);
610
+
611
+ if (objBST.root) expect(objBST.root.key).toBe(11);
612
+
613
+ expect(objBST.has(6)).toBe(true);
614
+
615
+ const node6 = objBST.get(6);
616
+ expect(node6 && objBST.getHeight(node6)).toBe(2);
617
+ expect(node6 && objBST.getDepth(node6)).toBe(3);
618
+
619
+ const nodeId10 = objBST.get(10);
620
+ expect(nodeId10?.key).toBe(10);
621
+
622
+ const nodeVal9 = objBST.get(9);
623
+ expect(nodeVal9?.key).toBe(9);
624
+
625
+ const leftMost = objBST.getLeftMost();
626
+ expect(leftMost?.key).toBe(1);
627
+
628
+ const node15 = objBST.get(15);
629
+ expect(node15?.val).toEqual({key: 15, keyA: 15});
630
+ const minNodeBySpecificNode = node15 && objBST.getLeftMost(node15);
631
+ expect(minNodeBySpecificNode?.key).toBe(12);
632
+
633
+ let subTreeSum = 0;
634
+ node15 && objBST.subTreeTraverse(node => (subTreeSum += node.key), node15);
635
+ expect(subTreeSum).toBe(70);
636
+
637
+ let lesserSum = 0;
638
+ objBST.lesserOrGreaterTraverse(node => (lesserSum += node.key), CP.lt, 10);
639
+ expect(lesserSum).toBe(45);
640
+
641
+ expect(node15).toBeInstanceOf(BSTNode);
642
+
643
+ const node11 = objBST.get(11);
644
+ expect(node11).toBeInstanceOf(BSTNode);
645
+
646
+ const dfsInorderNodes = objBST.dfs(node => node, 'in');
647
+ expect(dfsInorderNodes[0].key).toBe(1);
648
+ expect(dfsInorderNodes[dfsInorderNodes.length - 1].key).toBe(16);
649
+
650
+ objBST.perfectlyBalance();
651
+ expect(objBST.isPerfectlyBalanced()).toBe(true);
652
+
653
+ const bfsNodesAfterBalanced: BSTNode<{key: number; keyA: number}>[] = [];
654
+ objBST.bfs(node => bfsNodesAfterBalanced.push(node));
655
+ expect(bfsNodesAfterBalanced[0].key).toBe(8);
656
+ expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16);
657
+
658
+ const removed11 = objBST.delete(11);
659
+ expect(removed11).toBeInstanceOf(Array);
660
+ expect(removed11[0]).toBeDefined();
661
+ expect(removed11[0].deleted).toBeDefined();
662
+
663
+ if (removed11[0].deleted) expect(removed11[0].deleted.key).toBe(11);
664
+
665
+ expect(objBST.isAVLBalanced()).toBe(true);
666
+
667
+ expect(node15 && objBST.getHeight(node15)).toBe(2);
668
+
669
+ const removed1 = objBST.delete(1);
670
+ expect(removed1).toBeInstanceOf(Array);
671
+ expect(removed1[0]).toBeDefined();
672
+ expect(removed1[0].deleted).toBeDefined();
673
+ if (removed1[0].deleted) expect(removed1[0].deleted.key).toBe(1);
674
+
675
+ expect(objBST.isAVLBalanced()).toBe(true);
676
+
677
+ expect(objBST.getHeight()).toBe(4);
678
+
679
+ const removed4 = objBST.delete(4);
680
+ expect(removed4).toBeInstanceOf(Array);
681
+ expect(removed4[0]).toBeDefined();
682
+ expect(removed4[0].deleted).toBeDefined();
683
+ if (removed4[0].deleted) expect(removed4[0].deleted.key).toBe(4);
684
+ expect(objBST.isAVLBalanced()).toBe(true);
685
+ expect(objBST.getHeight()).toBe(4);
686
+
687
+ const removed10 = objBST.delete(10);
688
+ expect(removed10).toBeInstanceOf(Array);
689
+ expect(removed10[0]).toBeDefined();
690
+ expect(removed10[0].deleted).toBeDefined();
691
+ if (removed10[0].deleted) expect(removed10[0].deleted.key).toBe(10);
692
+ expect(objBST.isAVLBalanced()).toBe(false);
693
+ expect(objBST.getHeight()).toBe(4);
694
+
695
+ const removed15 = objBST.delete(15);
696
+ expect(removed15).toBeInstanceOf(Array);
697
+ expect(removed15[0]).toBeDefined();
698
+ expect(removed15[0].deleted).toBeDefined();
699
+ if (removed15[0].deleted) expect(removed15[0].deleted.key).toBe(15);
700
+
701
+ expect(objBST.isAVLBalanced()).toBe(true);
702
+ expect(objBST.getHeight()).toBe(3);
703
+
704
+ const removed5 = objBST.delete(5);
705
+ expect(removed5).toBeInstanceOf(Array);
706
+ expect(removed5[0]).toBeDefined();
707
+ expect(removed5[0].deleted).toBeDefined();
708
+ if (removed5[0].deleted) expect(removed5[0].deleted.key).toBe(5);
709
+
710
+ expect(objBST.isAVLBalanced()).toBe(true);
711
+ expect(objBST.getHeight()).toBe(3);
712
+
713
+ const removed13 = objBST.delete(13);
714
+ expect(removed13).toBeInstanceOf(Array);
715
+ expect(removed13[0]).toBeDefined();
716
+ expect(removed13[0].deleted).toBeDefined();
717
+ if (removed13[0].deleted) expect(removed13[0].deleted.key).toBe(13);
718
+ expect(objBST.isAVLBalanced()).toBe(true);
719
+ expect(objBST.getHeight()).toBe(3);
720
+
721
+ const removed3 = objBST.delete(3);
722
+ expect(removed3).toBeInstanceOf(Array);
723
+ expect(removed3[0]).toBeDefined();
724
+ expect(removed3[0].deleted).toBeDefined();
725
+ if (removed3[0].deleted) expect(removed3[0].deleted.key).toBe(3);
726
+ expect(objBST.isAVLBalanced()).toBe(false);
727
+ expect(objBST.getHeight()).toBe(3);
728
+
729
+ const removed8 = objBST.delete(8);
730
+ expect(removed8).toBeInstanceOf(Array);
731
+ expect(removed8[0]).toBeDefined();
732
+ expect(removed8[0].deleted).toBeDefined();
733
+ if (removed8[0].deleted) expect(removed8[0].deleted.key).toBe(8);
734
+ expect(objBST.isAVLBalanced()).toBe(true);
735
+ expect(objBST.getHeight()).toBe(3);
736
+
737
+ const removed6 = objBST.delete(6);
738
+ expect(removed6).toBeInstanceOf(Array);
739
+ expect(removed6[0]).toBeDefined();
740
+ expect(removed6[0].deleted).toBeDefined();
741
+ if (removed6[0].deleted) expect(removed6[0].deleted.key).toBe(6);
742
+ expect(objBST.delete(6).length).toBe(0);
743
+ expect(objBST.isAVLBalanced()).toBe(false);
744
+ expect(objBST.getHeight()).toBe(3);
745
+
746
+ const removed7 = objBST.delete(7);
747
+ expect(removed7).toBeInstanceOf(Array);
748
+ expect(removed7[0]).toBeDefined();
749
+ expect(removed7[0].deleted).toBeDefined();
750
+ if (removed7[0].deleted) expect(removed7[0].deleted.key).toBe(7);
751
+ expect(objBST.isAVLBalanced()).toBe(false);
752
+ expect(objBST.getHeight()).toBe(3);
753
+
754
+ const removed9 = objBST.delete(9);
755
+ expect(removed9).toBeInstanceOf(Array);
756
+ expect(removed9[0]).toBeDefined();
757
+ expect(removed9[0].deleted).toBeDefined();
758
+ if (removed9[0].deleted) expect(removed9[0].deleted.key).toBe(9);
759
+ expect(objBST.isAVLBalanced()).toBe(false);
760
+ expect(objBST.getHeight()).toBe(3);
761
+
762
+ const removed14 = objBST.delete(14);
763
+ expect(removed14).toBeInstanceOf(Array);
764
+ expect(removed14[0]).toBeDefined();
765
+ expect(removed14[0].deleted).toBeDefined();
766
+ if (removed14[0].deleted) expect(removed14[0].deleted.key).toBe(14);
767
+ expect(objBST.isAVLBalanced()).toBe(false);
768
+ expect(objBST.getHeight()).toBe(2);
769
+
770
+ expect(objBST.isAVLBalanced()).toBe(false);
771
+
772
+ const bfsIDs: number[] = [];
773
+ objBST.bfs(node => bfsIDs.push(node.key));
774
+ expect(bfsIDs[0]).toBe(2);
775
+ expect(bfsIDs[1]).toBe(12);
776
+ expect(bfsIDs[2]).toBe(16);
777
+
778
+ const bfsNodes: BSTNode<{key: number; keyA: number}>[] = [];
389
779
  objBST.bfs(node => bfsNodes.push(node));
390
780
  expect(bfsNodes[0].key).toBe(2);
391
781
  expect(bfsNodes[1].key).toBe(12);
@@ -29,7 +29,7 @@ describe('Overall BinaryTree Test', () => {
29
29
  bfsIDs[0] === 11; // true
30
30
  expect(bfsIDs[0]).toBe(11);
31
31
 
32
- const objBST = new BST<{ key: number; keyA: number }>();
32
+ const objBST = new BST<{key: number; keyA: number}>();
33
33
  objBST.add(11, {key: 11, keyA: 11});
34
34
  objBST.add(3, {key: 3, keyA: 3});
35
35
 
@@ -1,14 +1,80 @@
1
- // import {RBTree, RBTreeNode} from '../../../../src';
1
+ import {RBTree, RBTreeNode} from '../../../../src';
2
+
3
+ describe('RBTreeNode', () => {
4
+ it('should create an instance of RBTreeNode', () => {
5
+ const node = new RBTreeNode<number>(1);
6
+ expect(node).toBeInstanceOf(RBTreeNode);
7
+ });
8
+
9
+ it('should set and get the ID correctly', () => {
10
+ const node = new RBTreeNode<number>(1);
11
+ expect(node.key).toBe(1);
12
+
13
+ node.key = 2;
14
+ expect(node.key).toBe(2);
15
+ });
16
+
17
+ it('should set and get the value correctly', () => {
18
+ const node: RBTreeNode<number> = new RBTreeNode<number>(1, 42);
19
+ expect(node.val).toBe(42);
20
+
21
+ node.val = 55;
22
+ expect(node.val).toBe(55);
23
+ });
24
+
25
+ it('should set and get the left child correctly', () => {
26
+ const node1 = new RBTreeNode<number>(1);
27
+ const node2 = new RBTreeNode<number>(2);
28
+
29
+ node1.left = node2;
30
+
31
+ expect(node1.left).toBe(node2);
32
+ expect(node2.parent).toBe(node1);
33
+ });
34
+
35
+ it('should set and get the right child correctly', () => {
36
+ const node1 = new RBTreeNode<number>(1);
37
+ const node2 = new RBTreeNode<number>(2);
38
+
39
+ node1.right = node2;
40
+
41
+ expect(node1.right).toBe(node2);
42
+ expect(node2.parent).toBe(node1);
43
+ });
44
+
45
+ it('should set and get the parent correctly', () => {
46
+ const node1 = new RBTreeNode<number>(1);
47
+ const node2 = new RBTreeNode<number>(2);
48
+
49
+ node1.left = node2;
50
+
51
+ expect(node2.parent).toBe(node1);
52
+ expect(node1.left).toBe(node2);
53
+ });
54
+
55
+ it('should determine family position correctly', () => {
56
+ const root = new RBTreeNode<number>(1);
57
+ const leftChild = new RBTreeNode<number>(2);
58
+ const rightChild = new RBTreeNode<number>(3);
59
+
60
+ root.left = leftChild;
61
+ root.right = rightChild;
62
+
63
+ expect(leftChild.familyPosition).toBe('LEFT');
64
+ expect(rightChild.familyPosition).toBe('RIGHT');
65
+ expect(root.familyPosition).toBe('ROOT');
66
+ });
67
+ });
2
68
 
3
69
  describe('Red-Black Tree Tests', () => {
4
- // let tree: RBTree<RBTreeNode<number>>;
5
- //
6
- // beforeEach(() => {
7
- // tree = new RBTree<RBTreeNode<number>>();
8
- // });
70
+ let tree: RBTree<RBTreeNode<number>>;
71
+
72
+ beforeEach(() => {
73
+ tree = new RBTree<RBTreeNode<number>>();
74
+ });
9
75
 
10
76
  test('Insertion and In-order Traverse', () => {
11
- // tree.add(5);
77
+ tree.add(5);
12
78
  // tree.add(3);
13
79
  // tree.add(7);
14
80
  // tree.add(2);