data-structure-typed 1.54.2 → 1.54.3
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/LICENSE +2 -2
- package/README.md +14 -1
- package/README_zh-CN.md +1 -1
- package/benchmark/report.html +4 -1
- package/benchmark/report.json +76 -17
- package/dist/cjs/data-structures/binary-tree/avl-tree-counter.d.ts +21 -20
- package/dist/cjs/data-structures/binary-tree/avl-tree-counter.js +8 -7
- package/dist/cjs/data-structures/binary-tree/avl-tree-counter.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +12 -12
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +2 -2
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +25 -21
- package/dist/cjs/data-structures/binary-tree/avl-tree.js +12 -8
- package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +111 -225
- package/dist/cjs/data-structures/binary-tree/binary-tree.js +177 -144
- package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/bst.d.ts +59 -53
- package/dist/cjs/data-structures/binary-tree/bst.js +75 -119
- package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/red-black-tree.d.ts +18 -18
- package/dist/cjs/data-structures/binary-tree/red-black-tree.js +6 -6
- package/dist/cjs/data-structures/binary-tree/red-black-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/tree-counter.d.ts +19 -19
- package/dist/cjs/data-structures/binary-tree/tree-counter.js +12 -12
- package/dist/cjs/data-structures/binary-tree/tree-counter.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +12 -12
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +2 -2
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
- package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +1 -0
- package/dist/cjs/types/data-structures/binary-tree/bst.d.ts +1 -1
- package/dist/cjs/utils/utils.d.ts +2 -2
- package/dist/esm/data-structures/binary-tree/avl-tree-counter.d.ts +21 -20
- package/dist/esm/data-structures/binary-tree/avl-tree-counter.js +9 -8
- package/dist/esm/data-structures/binary-tree/avl-tree-counter.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.d.ts +12 -12
- package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js +3 -3
- package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/avl-tree.d.ts +25 -21
- package/dist/esm/data-structures/binary-tree/avl-tree.js +13 -9
- package/dist/esm/data-structures/binary-tree/avl-tree.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/binary-tree.d.ts +111 -225
- package/dist/esm/data-structures/binary-tree/binary-tree.js +181 -148
- package/dist/esm/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/bst.d.ts +59 -53
- package/dist/esm/data-structures/binary-tree/bst.js +76 -120
- package/dist/esm/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/red-black-tree.d.ts +18 -18
- package/dist/esm/data-structures/binary-tree/red-black-tree.js +7 -7
- package/dist/esm/data-structures/binary-tree/red-black-tree.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/tree-counter.d.ts +19 -19
- package/dist/esm/data-structures/binary-tree/tree-counter.js +13 -13
- package/dist/esm/data-structures/binary-tree/tree-counter.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/tree-multi-map.d.ts +12 -12
- package/dist/esm/data-structures/binary-tree/tree-multi-map.js +3 -3
- package/dist/esm/data-structures/binary-tree/tree-multi-map.js.map +1 -1
- package/dist/esm/types/data-structures/binary-tree/binary-tree.d.ts +1 -0
- package/dist/esm/types/data-structures/binary-tree/bst.d.ts +1 -1
- package/dist/esm/utils/utils.d.ts +2 -2
- package/dist/umd/data-structure-typed.js +296 -279
- package/dist/umd/data-structure-typed.min.js +5 -12
- package/dist/umd/data-structure-typed.min.js.map +1 -1
- package/package.json +7 -7
- package/src/data-structures/binary-tree/avl-tree-counter.ts +30 -23
- package/src/data-structures/binary-tree/avl-tree-multi-map.ts +25 -15
- package/src/data-structures/binary-tree/avl-tree.ts +35 -29
- package/src/data-structures/binary-tree/binary-tree.ts +469 -252
- package/src/data-structures/binary-tree/bst.ts +141 -143
- package/src/data-structures/binary-tree/red-black-tree.ts +27 -35
- package/src/data-structures/binary-tree/tree-counter.ts +33 -27
- package/src/data-structures/binary-tree/tree-multi-map.ts +25 -17
- package/src/types/data-structures/binary-tree/binary-tree.ts +1 -0
- package/src/types/data-structures/binary-tree/bst.ts +1 -1
- package/src/utils/utils.ts +2 -2
- package/test/integration/compile.mjs +21 -21
- package/test/performance/data-structures/binary-tree/avl-tree.test.mjs +71 -0
- package/test/performance/data-structures/binary-tree/red-black-tree.test.mjs +81 -0
- package/test/performance/{reportor.js → reportor.mjs} +264 -8
- package/test/performance/reportor.ts +1 -1
- package/test/unit/data-structures/binary-tree/avl-tree-counter.test.ts +7 -7
- package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +4 -5
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +72 -5
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +132 -82
- package/test/unit/data-structures/binary-tree/bst.test.ts +12 -12
- package/test/unit/data-structures/binary-tree/red-black-tree.test.ts +4 -12
- package/test/unit/data-structures/binary-tree/tree-counter.test.ts +4 -4
- package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +5 -5
- package/test/utils/json2html.ts +0 -154
- package/test/performance/data-structures/binary-tree/avl-tree.test.js +0 -45
- /package/test/performance/data-structures/binary-tree/{rb-tree.test.ts → red-black-tree.test.ts} +0 -0
|
@@ -217,20 +217,20 @@ describe('BinaryTree', () => {
|
|
|
217
217
|
expect(cloned.root?.right?.key).toBe(6);
|
|
218
218
|
expect(cloned.root?.right?.left?.key).toBe(3);
|
|
219
219
|
expect(cloned.root?.right?.right).toBe(null);
|
|
220
|
-
expect(cloned.dfs(node => node.key, 'PRE', cloned.getNode(6), 'ITERATIVE')).toEqual([6, 3, 7]);
|
|
221
|
-
expect(cloned.dfs(node => (node ? node.key : null), 'PRE', cloned.getNode(6), 'ITERATIVE', true)).toEqual([
|
|
220
|
+
expect(cloned.dfs(node => node.key, 'PRE', false, cloned.getNode(6), 'ITERATIVE')).toEqual([6, 3, 7]);
|
|
221
|
+
expect(cloned.dfs(node => (node ? node.key : null), 'PRE', false, cloned.getNode(6), 'ITERATIVE', true)).toEqual([
|
|
222
222
|
6,
|
|
223
223
|
3,
|
|
224
224
|
7,
|
|
225
225
|
null
|
|
226
226
|
]);
|
|
227
|
-
expect(cloned.dfs(node => (node ? node.key : node), 'PRE', cloned.getNode(6), 'ITERATIVE', true)).toEqual([
|
|
227
|
+
expect(cloned.dfs(node => (node ? node.key : node), 'PRE', false, cloned.getNode(6), 'ITERATIVE', true)).toEqual([
|
|
228
228
|
6,
|
|
229
229
|
3,
|
|
230
230
|
7,
|
|
231
231
|
null
|
|
232
232
|
]);
|
|
233
|
-
expect(cloned.dfs(node => (node ? node.key : null), 'PRE', cloned.getNode(6), 'RECURSIVE', true)).toEqual([
|
|
233
|
+
expect(cloned.dfs(node => (node ? node.key : null), 'PRE', false, cloned.getNode(6), 'RECURSIVE', true)).toEqual([
|
|
234
234
|
6,
|
|
235
235
|
3,
|
|
236
236
|
7,
|
|
@@ -532,11 +532,11 @@ describe('BinaryTree', () => {
|
|
|
532
532
|
expect(binTree.dfs()).toEqual([]);
|
|
533
533
|
expect([...binTree.values()]).toEqual([]);
|
|
534
534
|
binTree.addMany([4, 2, 6, null, 1, 3, null, 5, null, 7]);
|
|
535
|
-
expect(binTree.dfs(node => node.key, 'PRE', undefined, 'ITERATIVE')).toEqual([4, 2, 1, 5, 6, 3, 7]);
|
|
536
|
-
expect(binTree.dfs(node => (node !== null ? node.key : null), 'PRE', undefined, 'ITERATIVE', false)).toEqual(
|
|
537
|
-
4, 2, 1, 5, 6, 3, 7
|
|
538
|
-
|
|
539
|
-
expect(binTree.dfs(node => (node !== null ? node.key : null), 'PRE', undefined, 'ITERATIVE', true)).toEqual([
|
|
535
|
+
expect(binTree.dfs(node => node.key, 'PRE', false, undefined, 'ITERATIVE')).toEqual([4, 2, 1, 5, 6, 3, 7]);
|
|
536
|
+
expect(binTree.dfs(node => (node !== null ? node.key : null), 'PRE', false, undefined, 'ITERATIVE', false)).toEqual(
|
|
537
|
+
[4, 2, 1, 5, 6, 3, 7]
|
|
538
|
+
);
|
|
539
|
+
expect(binTree.dfs(node => (node !== null ? node.key : null), 'PRE', false, undefined, 'ITERATIVE', true)).toEqual([
|
|
540
540
|
4,
|
|
541
541
|
2,
|
|
542
542
|
null,
|
|
@@ -549,11 +549,11 @@ describe('BinaryTree', () => {
|
|
|
549
549
|
null
|
|
550
550
|
]);
|
|
551
551
|
|
|
552
|
-
expect(binTree.dfs(node => node.key, 'PRE', undefined, 'RECURSIVE')).toEqual([4, 2, 1, 5, 6, 3, 7]);
|
|
553
|
-
expect(binTree.dfs(node => (node !== null ? node.key : null), 'PRE', undefined, 'RECURSIVE', false)).toEqual(
|
|
554
|
-
4, 2, 1, 5, 6, 3, 7
|
|
555
|
-
|
|
556
|
-
expect(binTree.dfs(node => (node !== null ? node.key : null), 'PRE', undefined, 'RECURSIVE', true)).toEqual([
|
|
552
|
+
expect(binTree.dfs(node => node.key, 'PRE', false, undefined, 'RECURSIVE')).toEqual([4, 2, 1, 5, 6, 3, 7]);
|
|
553
|
+
expect(binTree.dfs(node => (node !== null ? node.key : null), 'PRE', false, undefined, 'RECURSIVE', false)).toEqual(
|
|
554
|
+
[4, 2, 1, 5, 6, 3, 7]
|
|
555
|
+
);
|
|
556
|
+
expect(binTree.dfs(node => (node !== null ? node.key : null), 'PRE', false, undefined, 'RECURSIVE', true)).toEqual([
|
|
557
557
|
4,
|
|
558
558
|
2,
|
|
559
559
|
null,
|
|
@@ -566,11 +566,11 @@ describe('BinaryTree', () => {
|
|
|
566
566
|
null
|
|
567
567
|
]);
|
|
568
568
|
|
|
569
|
-
expect(binTree.dfs(node => node.key, 'IN', undefined, 'ITERATIVE')).toEqual([2, 5, 1, 4, 7, 3, 6]);
|
|
570
|
-
expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', undefined, 'ITERATIVE', false)).toEqual([
|
|
569
|
+
expect(binTree.dfs(node => node.key, 'IN', false, undefined, 'ITERATIVE')).toEqual([2, 5, 1, 4, 7, 3, 6]);
|
|
570
|
+
expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', false, undefined, 'ITERATIVE', false)).toEqual([
|
|
571
571
|
2, 5, 1, 4, 7, 3, 6
|
|
572
572
|
]);
|
|
573
|
-
expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', undefined, 'ITERATIVE', true)).toEqual([
|
|
573
|
+
expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', false, undefined, 'ITERATIVE', true)).toEqual([
|
|
574
574
|
null,
|
|
575
575
|
2,
|
|
576
576
|
5,
|
|
@@ -583,11 +583,11 @@ describe('BinaryTree', () => {
|
|
|
583
583
|
null
|
|
584
584
|
]);
|
|
585
585
|
|
|
586
|
-
expect(binTree.dfs(node => node.key, 'IN', undefined, 'RECURSIVE')).toEqual([2, 5, 1, 4, 7, 3, 6]);
|
|
587
|
-
expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', undefined, 'RECURSIVE', false)).toEqual([
|
|
586
|
+
expect(binTree.dfs(node => node.key, 'IN', false, undefined, 'RECURSIVE')).toEqual([2, 5, 1, 4, 7, 3, 6]);
|
|
587
|
+
expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', false, undefined, 'RECURSIVE', false)).toEqual([
|
|
588
588
|
2, 5, 1, 4, 7, 3, 6
|
|
589
589
|
]);
|
|
590
|
-
expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', undefined, 'RECURSIVE', true)).toEqual([
|
|
590
|
+
expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', false, undefined, 'RECURSIVE', true)).toEqual([
|
|
591
591
|
null,
|
|
592
592
|
2,
|
|
593
593
|
5,
|
|
@@ -600,89 +600,71 @@ describe('BinaryTree', () => {
|
|
|
600
600
|
null
|
|
601
601
|
]);
|
|
602
602
|
|
|
603
|
-
expect(binTree.dfs(node => node.key, 'POST', undefined, 'ITERATIVE')).toEqual([5, 1, 2, 7, 3, 6, 4]);
|
|
604
|
-
expect(
|
|
605
|
-
|
|
606
|
-
]);
|
|
607
|
-
expect(binTree.dfs(node => (node !== null ? node.key : null), 'POST', undefined, 'ITERATIVE', true)).toEqual(
|
|
608
|
-
null,
|
|
609
|
-
|
|
610
|
-
null,
|
|
611
|
-
1,
|
|
612
|
-
2,
|
|
613
|
-
7,
|
|
614
|
-
3,
|
|
615
|
-
null,
|
|
616
|
-
6,
|
|
617
|
-
4
|
|
618
|
-
]);
|
|
603
|
+
expect(binTree.dfs(node => node.key, 'POST', false, undefined, 'ITERATIVE')).toEqual([5, 1, 2, 7, 3, 6, 4]);
|
|
604
|
+
expect(
|
|
605
|
+
binTree.dfs(node => (node !== null ? node.key : null), 'POST', false, undefined, 'ITERATIVE', false)
|
|
606
|
+
).toEqual([5, 1, 2, 7, 3, 6, 4]);
|
|
607
|
+
expect(binTree.dfs(node => (node !== null ? node.key : null), 'POST', false, undefined, 'ITERATIVE', true)).toEqual(
|
|
608
|
+
[null, 5, null, 1, 2, 7, 3, null, 6, 4]
|
|
609
|
+
);
|
|
619
610
|
|
|
620
|
-
expect(binTree.dfs(node => node.key, 'POST', undefined, 'RECURSIVE')).toEqual([5, 1, 2, 7, 3, 6, 4]);
|
|
621
|
-
expect(
|
|
622
|
-
|
|
623
|
-
]);
|
|
624
|
-
expect(binTree.dfs(node => (node !== null ? node.key : null), 'POST', undefined, 'RECURSIVE', true)).toEqual(
|
|
625
|
-
null,
|
|
626
|
-
|
|
627
|
-
null,
|
|
628
|
-
1,
|
|
629
|
-
2,
|
|
630
|
-
7,
|
|
631
|
-
3,
|
|
632
|
-
null,
|
|
633
|
-
6,
|
|
634
|
-
4
|
|
635
|
-
]);
|
|
611
|
+
expect(binTree.dfs(node => node.key, 'POST', false, undefined, 'RECURSIVE')).toEqual([5, 1, 2, 7, 3, 6, 4]);
|
|
612
|
+
expect(
|
|
613
|
+
binTree.dfs(node => (node !== null ? node.key : null), 'POST', false, undefined, 'RECURSIVE', false)
|
|
614
|
+
).toEqual([5, 1, 2, 7, 3, 6, 4]);
|
|
615
|
+
expect(binTree.dfs(node => (node !== null ? node.key : null), 'POST', false, undefined, 'RECURSIVE', true)).toEqual(
|
|
616
|
+
[null, 5, null, 1, 2, 7, 3, null, 6, 4]
|
|
617
|
+
);
|
|
636
618
|
});
|
|
637
619
|
|
|
638
620
|
it('should sub binTree traverse', () => {
|
|
639
621
|
binTree.addMany([4, 2, 6, null, 1, 3, null, 5, null, 7]);
|
|
640
|
-
expect(binTree.dfs(node => node.key, 'PRE', binTree.getNode(6), 'ITERATIVE')).toEqual([6, 3, 7]);
|
|
622
|
+
expect(binTree.dfs(node => node.key, 'PRE', false, binTree.getNode(6), 'ITERATIVE')).toEqual([6, 3, 7]);
|
|
641
623
|
expect(
|
|
642
|
-
binTree.dfs(node => (node !== null ? node.key : null), 'PRE', binTree.getNode(6), 'ITERATIVE', false)
|
|
624
|
+
binTree.dfs(node => (node !== null ? node.key : null), 'PRE', false, binTree.getNode(6), 'ITERATIVE', false)
|
|
643
625
|
).toEqual([6, 3, 7]);
|
|
644
626
|
expect(
|
|
645
|
-
binTree.dfs(node => (node !== null ? node.key : null), 'PRE', binTree.getNode(6), 'ITERATIVE', true)
|
|
627
|
+
binTree.dfs(node => (node !== null ? node.key : null), 'PRE', false, binTree.getNode(6), 'ITERATIVE', true)
|
|
646
628
|
).toEqual([6, 3, 7, null]);
|
|
647
629
|
|
|
648
|
-
expect(binTree.dfs(node => node.key, 'PRE', binTree.getNode(6), 'RECURSIVE')).toEqual([6, 3, 7]);
|
|
630
|
+
expect(binTree.dfs(node => node.key, 'PRE', false, binTree.getNode(6), 'RECURSIVE')).toEqual([6, 3, 7]);
|
|
649
631
|
expect(
|
|
650
|
-
binTree.dfs(node => (node !== null ? node.key : null), 'PRE', binTree.getNode(6), 'RECURSIVE', false)
|
|
632
|
+
binTree.dfs(node => (node !== null ? node.key : null), 'PRE', false, binTree.getNode(6), 'RECURSIVE', false)
|
|
651
633
|
).toEqual([6, 3, 7]);
|
|
652
634
|
expect(
|
|
653
|
-
binTree.dfs(node => (node !== null ? node.key : null), 'PRE', binTree.getNode(6), 'RECURSIVE', true)
|
|
635
|
+
binTree.dfs(node => (node !== null ? node.key : null), 'PRE', false, binTree.getNode(6), 'RECURSIVE', true)
|
|
654
636
|
).toEqual([6, 3, 7, null]);
|
|
655
637
|
|
|
656
|
-
expect(binTree.dfs(node => node.key, 'IN', binTree.getNode(6), 'ITERATIVE')).toEqual([7, 3, 6]);
|
|
638
|
+
expect(binTree.dfs(node => node.key, 'IN', false, binTree.getNode(6), 'ITERATIVE')).toEqual([7, 3, 6]);
|
|
657
639
|
expect(
|
|
658
|
-
binTree.dfs(node => (node !== null ? node.key : null), 'IN', binTree.getNode(6), 'ITERATIVE', false)
|
|
640
|
+
binTree.dfs(node => (node !== null ? node.key : null), 'IN', false, binTree.getNode(6), 'ITERATIVE', false)
|
|
659
641
|
).toEqual([7, 3, 6]);
|
|
660
|
-
expect(
|
|
661
|
-
|
|
662
|
-
);
|
|
642
|
+
expect(
|
|
643
|
+
binTree.dfs(node => (node !== null ? node.key : null), 'IN', false, binTree.getNode(6), 'ITERATIVE', true)
|
|
644
|
+
).toEqual([7, 3, 6, null]);
|
|
663
645
|
|
|
664
|
-
expect(binTree.dfs(node => node.key, 'IN', binTree.getNode(6), 'RECURSIVE')).toEqual([7, 3, 6]);
|
|
646
|
+
expect(binTree.dfs(node => node.key, 'IN', false, binTree.getNode(6), 'RECURSIVE')).toEqual([7, 3, 6]);
|
|
665
647
|
expect(
|
|
666
|
-
binTree.dfs(node => (node !== null ? node.key : null), 'IN', binTree.getNode(6), 'RECURSIVE', false)
|
|
648
|
+
binTree.dfs(node => (node !== null ? node.key : null), 'IN', false, binTree.getNode(6), 'RECURSIVE', false)
|
|
667
649
|
).toEqual([7, 3, 6]);
|
|
668
|
-
expect(
|
|
669
|
-
|
|
670
|
-
);
|
|
650
|
+
expect(
|
|
651
|
+
binTree.dfs(node => (node !== null ? node.key : null), 'IN', false, binTree.getNode(6), 'RECURSIVE', true)
|
|
652
|
+
).toEqual([7, 3, 6, null]);
|
|
671
653
|
|
|
672
|
-
expect(binTree.dfs(node => node.key, 'POST', binTree.getNode(6), 'ITERATIVE')).toEqual([7, 3, 6]);
|
|
654
|
+
expect(binTree.dfs(node => node.key, 'POST', false, binTree.getNode(6), 'ITERATIVE')).toEqual([7, 3, 6]);
|
|
673
655
|
expect(
|
|
674
|
-
binTree.dfs(node => (node !== null ? node.key : null), 'POST', binTree.getNode(6), 'ITERATIVE', false)
|
|
656
|
+
binTree.dfs(node => (node !== null ? node.key : null), 'POST', false, binTree.getNode(6), 'ITERATIVE', false)
|
|
675
657
|
).toEqual([7, 3, 6]);
|
|
676
658
|
expect(
|
|
677
|
-
binTree.dfs(node => (node !== null ? node.key : null), 'POST', binTree.getNode(6), 'ITERATIVE', true)
|
|
659
|
+
binTree.dfs(node => (node !== null ? node.key : null), 'POST', false, binTree.getNode(6), 'ITERATIVE', true)
|
|
678
660
|
).toEqual([7, 3, null, 6]);
|
|
679
661
|
|
|
680
|
-
expect(binTree.dfs(node => node.key, 'POST', binTree.getNode(6), 'RECURSIVE')).toEqual([7, 3, 6]);
|
|
662
|
+
expect(binTree.dfs(node => node.key, 'POST', false, binTree.getNode(6), 'RECURSIVE')).toEqual([7, 3, 6]);
|
|
681
663
|
expect(
|
|
682
|
-
binTree.dfs(node => (node !== null ? node.key : null), 'POST', binTree.getNode(6), 'RECURSIVE', false)
|
|
664
|
+
binTree.dfs(node => (node !== null ? node.key : null), 'POST', false, binTree.getNode(6), 'RECURSIVE', false)
|
|
683
665
|
).toEqual([7, 3, 6]);
|
|
684
666
|
expect(
|
|
685
|
-
binTree.dfs(node => (node !== null ? node.key : null), 'POST', binTree.getNode(6), 'RECURSIVE', true)
|
|
667
|
+
binTree.dfs(node => (node !== null ? node.key : null), 'POST', false, binTree.getNode(6), 'RECURSIVE', true)
|
|
686
668
|
).toEqual([7, 3, null, 6]);
|
|
687
669
|
});
|
|
688
670
|
|
|
@@ -814,7 +796,7 @@ describe('BinaryTree Morris Traversal', () => {
|
|
|
814
796
|
|
|
815
797
|
expect(result).toEqual(expected);
|
|
816
798
|
expect(binTree.dfs(node => node.key, 'IN')).toEqual(expected);
|
|
817
|
-
expect(binTree.dfs(node => node.key, 'IN', binTree.root, 'RECURSIVE')).toEqual(expected);
|
|
799
|
+
expect(binTree.dfs(node => node.key, 'IN', false, binTree.root, 'RECURSIVE')).toEqual(expected);
|
|
818
800
|
});
|
|
819
801
|
|
|
820
802
|
it('should perform pre-order Morris traversal correctly as dfs traversal', () => {
|
|
@@ -875,7 +857,7 @@ describe('BinaryTree toEntryFn', () => {
|
|
|
875
857
|
|
|
876
858
|
expect(binTree.morris(node => node.key, 'IN')).toEqual(expected);
|
|
877
859
|
expect(binTree.dfs(node => node.key, 'IN')).toEqual(expected);
|
|
878
|
-
expect(binTree.dfs(node => node.key, 'IN', binTree.root, 'RECURSIVE')).toEqual(expected);
|
|
860
|
+
expect(binTree.dfs(node => node.key, 'IN', false, binTree.root, 'RECURSIVE')).toEqual(expected);
|
|
879
861
|
});
|
|
880
862
|
|
|
881
863
|
it('should toEntryFn with initial', () => {
|
|
@@ -890,7 +872,7 @@ describe('BinaryTree toEntryFn', () => {
|
|
|
890
872
|
|
|
891
873
|
expect(binTree.morris(node => node.key, 'IN')).toEqual(expected);
|
|
892
874
|
expect(binTree.dfs(node => node.key, 'IN')).toEqual(expected);
|
|
893
|
-
expect(binTree.dfs(node => node.key, 'IN', binTree.root, 'RECURSIVE')).toEqual(expected);
|
|
875
|
+
expect(binTree.dfs(node => node.key, 'IN', false, binTree.root, 'RECURSIVE')).toEqual(expected);
|
|
894
876
|
});
|
|
895
877
|
|
|
896
878
|
it('should no toEntryFn', () => {
|
|
@@ -905,7 +887,7 @@ describe('BinaryTree toEntryFn', () => {
|
|
|
905
887
|
|
|
906
888
|
expect(binTree.morris(node => node.key, 'IN')).toEqual(data.sort((a, b) => a.obj.id - b.obj.id));
|
|
907
889
|
expect(binTree.dfs(node => node.key, 'IN')).toEqual(data);
|
|
908
|
-
expect(binTree.dfs(node => node.key, 'IN', binTree.root, 'RECURSIVE')).toEqual(data);
|
|
890
|
+
expect(binTree.dfs(node => node.key, 'IN', false, binTree.root, 'RECURSIVE')).toEqual(data);
|
|
909
891
|
});
|
|
910
892
|
});
|
|
911
893
|
|
|
@@ -953,19 +935,21 @@ describe('BinaryTree traversals', () => {
|
|
|
953
935
|
);
|
|
954
936
|
|
|
955
937
|
expect(binTree.dfs(node => node.key, 'PRE')).toEqual([35, 20, 15, 16, 29, 28, 30, 40, 50, 45, 55]);
|
|
956
|
-
expect(binTree.dfs(node => node.key, 'PRE', binTree.root, 'RECURSIVE')).toEqual([
|
|
938
|
+
expect(binTree.dfs(node => node.key, 'PRE', false, binTree.root, 'RECURSIVE')).toEqual([
|
|
957
939
|
35, 20, 15, 16, 29, 28, 30, 40, 50, 45, 55
|
|
958
940
|
]);
|
|
959
941
|
expect(
|
|
960
|
-
binTree
|
|
942
|
+
binTree
|
|
943
|
+
.dfs(node => node, 'PRE', false, binTree.root, 'ITERATIVE', true)
|
|
944
|
+
.map(node => (node === null ? null : node.key))
|
|
961
945
|
).toEqual([35, 20, 15, null, 16, 29, 28, 30, 40, null, 50, 45, 55]);
|
|
962
946
|
expect(
|
|
963
|
-
binTree.dfs(node => node, 'PRE', binTree.root, 'RECURSIVE', true).map(node => (node ? node.key : null))
|
|
947
|
+
binTree.dfs(node => node, 'PRE', false, binTree.root, 'RECURSIVE', true).map(node => (node ? node.key : null))
|
|
964
948
|
).toEqual([35, 20, 15, null, 16, 29, 28, 30, 40, null, 50, 45, 55]);
|
|
965
949
|
|
|
966
950
|
expect(binTree.dfs(node => node.key, 'IN')).toEqual([15, 16, 20, 28, 29, 30, 35, 40, 45, 50, 55]);
|
|
967
951
|
expect(binTree.dfs(node => node.key, 'POST')).toEqual([16, 15, 28, 30, 29, 20, 45, 55, 50, 40, 35]);
|
|
968
|
-
expect(binTree.dfs(node => node.key, 'POST', binTree.root, 'RECURSIVE')).toEqual([
|
|
952
|
+
expect(binTree.dfs(node => node.key, 'POST', false, binTree.root, 'RECURSIVE')).toEqual([
|
|
969
953
|
16, 15, 28, 30, 29, 20, 45, 55, 50, 40, 35
|
|
970
954
|
]);
|
|
971
955
|
expect(binTree.bfs(node => node.key, binTree.root, 'RECURSIVE')).toEqual([
|
|
@@ -1434,3 +1418,69 @@ describe('BinaryTree not map mode iterative methods test', () => {
|
|
|
1434
1418
|
expect(cloned.get(cloned.root?.right)).toBe('c');
|
|
1435
1419
|
});
|
|
1436
1420
|
});
|
|
1421
|
+
|
|
1422
|
+
describe('classic use', () => {
|
|
1423
|
+
it('@example determine loan approval using a decision tree', () => {
|
|
1424
|
+
// Decision tree structure
|
|
1425
|
+
const loanDecisionTree = new BinaryTree<string>(
|
|
1426
|
+
['stableIncome', 'goodCredit', 'Rejected', 'Approved', 'Rejected'],
|
|
1427
|
+
{ isDuplicate: true }
|
|
1428
|
+
);
|
|
1429
|
+
|
|
1430
|
+
function determineLoanApproval(
|
|
1431
|
+
node?: BinaryTreeNode<string> | null,
|
|
1432
|
+
conditions?: { [key: string]: boolean }
|
|
1433
|
+
): string {
|
|
1434
|
+
if (!node) throw new Error('Invalid node');
|
|
1435
|
+
|
|
1436
|
+
// If it's a leaf node, return the decision result
|
|
1437
|
+
if (!node.left && !node.right) return node.key;
|
|
1438
|
+
|
|
1439
|
+
// Check if a valid condition exists for the current node's key
|
|
1440
|
+
return conditions?.[node.key]
|
|
1441
|
+
? determineLoanApproval(node.left, conditions)
|
|
1442
|
+
: determineLoanApproval(node.right, conditions);
|
|
1443
|
+
}
|
|
1444
|
+
|
|
1445
|
+
// Test case 1: Stable income and good credit score
|
|
1446
|
+
expect(determineLoanApproval(loanDecisionTree.root, { stableIncome: true, goodCredit: true })).toBe('Approved');
|
|
1447
|
+
|
|
1448
|
+
// Test case 2: Stable income but poor credit score
|
|
1449
|
+
expect(determineLoanApproval(loanDecisionTree.root, { stableIncome: true, goodCredit: false })).toBe('Rejected');
|
|
1450
|
+
|
|
1451
|
+
// Test case 3: No stable income
|
|
1452
|
+
expect(determineLoanApproval(loanDecisionTree.root, { stableIncome: false, goodCredit: true })).toBe('Rejected');
|
|
1453
|
+
|
|
1454
|
+
// Test case 4: No stable income and poor credit score
|
|
1455
|
+
expect(determineLoanApproval(loanDecisionTree.root, { stableIncome: false, goodCredit: false })).toBe('Rejected');
|
|
1456
|
+
});
|
|
1457
|
+
|
|
1458
|
+
it('@example evaluate the arithmetic expression represented by the binary tree', () => {
|
|
1459
|
+
const expressionTree = new BinaryTree<number | string>(['+', 3, '*', null, null, 5, '-', null, null, 2, 8]);
|
|
1460
|
+
|
|
1461
|
+
function evaluate(node?: BinaryTreeNode<number | string> | null): number {
|
|
1462
|
+
if (!node) return 0;
|
|
1463
|
+
|
|
1464
|
+
if (typeof node.key === 'number') return node.key;
|
|
1465
|
+
|
|
1466
|
+
const leftValue = evaluate(node.left); // Evaluate the left subtree
|
|
1467
|
+
const rightValue = evaluate(node.right); // Evaluate the right subtree
|
|
1468
|
+
|
|
1469
|
+
// Perform the operation based on the current node's operator
|
|
1470
|
+
switch (node.key) {
|
|
1471
|
+
case '+':
|
|
1472
|
+
return leftValue + rightValue;
|
|
1473
|
+
case '-':
|
|
1474
|
+
return leftValue - rightValue;
|
|
1475
|
+
case '*':
|
|
1476
|
+
return leftValue * rightValue;
|
|
1477
|
+
case '/':
|
|
1478
|
+
return rightValue !== 0 ? leftValue / rightValue : 0; // Handle division by zero
|
|
1479
|
+
default:
|
|
1480
|
+
throw new Error(`Unsupported operator: ${node.key}`);
|
|
1481
|
+
}
|
|
1482
|
+
}
|
|
1483
|
+
|
|
1484
|
+
expect(evaluate(expressionTree.root)).toBe(-27);
|
|
1485
|
+
});
|
|
1486
|
+
});
|
|
@@ -90,7 +90,7 @@ describe('BST operations test', () => {
|
|
|
90
90
|
expect(nodes.map(node => node.key)).toEqual([15]);
|
|
91
91
|
|
|
92
92
|
let subTreeSum = 0;
|
|
93
|
-
if (node15) bst.dfs(node => (subTreeSum += node.key), 'PRE', 15);
|
|
93
|
+
if (node15) bst.dfs(node => (subTreeSum += node.key), 'PRE', false, 15);
|
|
94
94
|
expect(subTreeSum).toBe(70);
|
|
95
95
|
|
|
96
96
|
let lesserSum = 0;
|
|
@@ -299,7 +299,7 @@ describe('BST operations test', () => {
|
|
|
299
299
|
expect(minNodeBySpecificNode?.key).toBe(12);
|
|
300
300
|
|
|
301
301
|
let subTreeSum = 0;
|
|
302
|
-
if (node15) objBST.dfs(node => (subTreeSum += node.key), 'PRE', node15);
|
|
302
|
+
if (node15) objBST.dfs(node => (subTreeSum += node.key), 'PRE', false, node15);
|
|
303
303
|
expect(subTreeSum).toBe(70);
|
|
304
304
|
|
|
305
305
|
let lesserSum = 0;
|
|
@@ -492,7 +492,7 @@ describe('BST operations test', () => {
|
|
|
492
492
|
|
|
493
493
|
it('should search in range', () => {
|
|
494
494
|
const bst = new BST<number>([10, 5, 15, 3, 7, 12, 18]);
|
|
495
|
-
expect(bst.rangeSearch([4, 12])).toEqual([
|
|
495
|
+
expect(bst.rangeSearch([4, 12])).toEqual([5, 7, 10, 12]);
|
|
496
496
|
expect(() => bst.rangeSearch([12, 4])).toThrow('low must be less than or equal to high');
|
|
497
497
|
expect(bst.rangeSearch([12, 12])).toEqual([12]);
|
|
498
498
|
});
|
|
@@ -535,7 +535,7 @@ describe('BST operations test recursively', () => {
|
|
|
535
535
|
expect(minNodeBySpecificNode?.key).toBe(12);
|
|
536
536
|
|
|
537
537
|
let subTreeSum = 0;
|
|
538
|
-
if (node15) bst.dfs(node => (subTreeSum += node.key), 'PRE', 15);
|
|
538
|
+
if (node15) bst.dfs(node => (subTreeSum += node.key), 'PRE', false, 15);
|
|
539
539
|
expect(subTreeSum).toBe(70);
|
|
540
540
|
|
|
541
541
|
let lesserSum = 0;
|
|
@@ -742,7 +742,7 @@ describe('BST operations test recursively', () => {
|
|
|
742
742
|
expect(minNodeBySpecificNode?.key).toBe(12);
|
|
743
743
|
|
|
744
744
|
let subTreeSum = 0;
|
|
745
|
-
if (node15) objBST.dfs(node => (subTreeSum += node.key), 'PRE', node15);
|
|
745
|
+
if (node15) objBST.dfs(node => (subTreeSum += node.key), 'PRE', false, node15);
|
|
746
746
|
expect(subTreeSum).toBe(70);
|
|
747
747
|
|
|
748
748
|
let lesserSum = 0;
|
|
@@ -1080,10 +1080,10 @@ describe('BST Performance test', function () {
|
|
|
1080
1080
|
it('should dfs as sub tree traversal, null should be ignored', () => {
|
|
1081
1081
|
const bst = new BST();
|
|
1082
1082
|
bst.addMany([4, 2, 6, 1, 3, 5, 7]);
|
|
1083
|
-
expect(bst.dfs(node => node.key, 'PRE', bst.getNode(6), 'ITERATIVE')).toEqual([6, 5, 7]);
|
|
1084
|
-
expect(bst.dfs(node => node.key, 'PRE', bst.getNode(6), 'RECURSIVE')).toEqual([6, 5, 7]);
|
|
1085
|
-
expect(bst.dfs(node => node?.key ?? undefined, 'PRE', bst.getNode(6), 'ITERATIVE')).toEqual([6, 5, 7]);
|
|
1086
|
-
expect(bst.dfs(node => node?.key ?? undefined, 'PRE', bst.getNode(6), 'RECURSIVE')).toEqual([6, 5, 7]);
|
|
1083
|
+
expect(bst.dfs(node => node.key, 'PRE', false, bst.getNode(6), 'ITERATIVE')).toEqual([6, 5, 7]);
|
|
1084
|
+
expect(bst.dfs(node => node.key, 'PRE', false, bst.getNode(6), 'RECURSIVE')).toEqual([6, 5, 7]);
|
|
1085
|
+
expect(bst.dfs(node => node?.key ?? undefined, 'PRE', false, bst.getNode(6), 'ITERATIVE')).toEqual([6, 5, 7]);
|
|
1086
|
+
expect(bst.dfs(node => node?.key ?? undefined, 'PRE', false, bst.getNode(6), 'RECURSIVE')).toEqual([6, 5, 7]);
|
|
1087
1087
|
});
|
|
1088
1088
|
});
|
|
1089
1089
|
|
|
@@ -1565,9 +1565,9 @@ describe('classic use', () => {
|
|
|
1565
1565
|
// Test case for finding elements in a given range
|
|
1566
1566
|
it('@example Find elements in a range', () => {
|
|
1567
1567
|
const bst = new BST<number>([10, 5, 15, 3, 7, 12, 18]);
|
|
1568
|
-
expect(bst.search(new Range(5, 10))).toEqual([
|
|
1569
|
-
expect(bst.rangeSearch([4, 12], node => node.key.toString())).toEqual(['
|
|
1570
|
-
expect(bst.search(new Range(4, 12, true, false))).toEqual([
|
|
1568
|
+
expect(bst.search(new Range(5, 10))).toEqual([5, 7, 10]);
|
|
1569
|
+
expect(bst.rangeSearch([4, 12], node => node.key.toString())).toEqual(['5', '7', '10', '12']);
|
|
1570
|
+
expect(bst.search(new Range(4, 12, true, false))).toEqual([5, 7, 10]);
|
|
1571
1571
|
expect(bst.rangeSearch([15, 20])).toEqual([15, 18]);
|
|
1572
1572
|
expect(bst.search(new Range(15, 20, false))).toEqual([18]);
|
|
1573
1573
|
});
|
|
@@ -504,11 +504,11 @@ describe('RedBlackTree 2', () => {
|
|
|
504
504
|
expect(rbTree.isBST()).toBe(true);
|
|
505
505
|
expect(rbTree.isBST(rbTree.root, 'RECURSIVE')).toBe(true);
|
|
506
506
|
|
|
507
|
-
expect(rbTree.dfs(n => n.key, 'IN', rbTree.root, 'ITERATIVE')).toEqual([
|
|
507
|
+
expect(rbTree.dfs(n => n.key, 'IN', false, rbTree.root, 'ITERATIVE')).toEqual([
|
|
508
508
|
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,
|
|
509
509
|
77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
|
|
510
510
|
]);
|
|
511
|
-
expect(rbTree.dfs(n => n.key, 'IN', rbTree.root, 'RECURSIVE')).toEqual([
|
|
511
|
+
expect(rbTree.dfs(n => n.key, 'IN', false, rbTree.root, 'RECURSIVE')).toEqual([
|
|
512
512
|
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,
|
|
513
513
|
77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
|
|
514
514
|
]);
|
|
@@ -524,7 +524,7 @@ describe('RedBlackTree 2', () => {
|
|
|
524
524
|
|
|
525
525
|
expect(rbTree.size).toBe(0);
|
|
526
526
|
expect(rbTree.isBST()).toBe(true);
|
|
527
|
-
expect(rbTree.dfs(n => n.key, 'IN', rbTree.root, 'ITERATIVE')).toEqual([]);
|
|
527
|
+
expect(rbTree.dfs(n => n.key, 'IN', false, rbTree.root, 'ITERATIVE')).toEqual([]);
|
|
528
528
|
|
|
529
529
|
rbTree.clear();
|
|
530
530
|
for (let i = 0; i < 1000; i++) {
|
|
@@ -838,14 +838,6 @@ describe('real world data', () => {
|
|
|
838
838
|
});
|
|
839
839
|
|
|
840
840
|
describe('classic use', () => {
|
|
841
|
-
// Test case for finding elements in a given range
|
|
842
|
-
it('@example Find elements in a range', () => {
|
|
843
|
-
const bst = new RedBlackTree<number>([10, 5, 15, 3, 7, 12, 18]);
|
|
844
|
-
expect(bst.search(new Range(5, 10))).toEqual([5, 10, 7]);
|
|
845
|
-
expect(bst.search(new Range(4, 12))).toEqual([5, 10, 12, 7]);
|
|
846
|
-
expect(bst.search(new Range(15, 20))).toEqual([15, 18]);
|
|
847
|
-
});
|
|
848
|
-
|
|
849
841
|
it('@example using Red-Black Tree as a price-based index for stock data', () => {
|
|
850
842
|
// Define the structure of individual stock records
|
|
851
843
|
interface StockRecord {
|
|
@@ -887,6 +879,6 @@ describe('classic use', () => {
|
|
|
887
879
|
[200, 400], // Price range
|
|
888
880
|
node => priceIndex.get(node)?.symbol // Extract stock symbols for the result
|
|
889
881
|
);
|
|
890
|
-
expect(stocksInRange).toEqual(['GOOGL', '
|
|
882
|
+
expect(stocksInRange).toEqual(['GOOGL', 'META', 'MSFT']); // Verify stocks in the range
|
|
891
883
|
});
|
|
892
884
|
});
|
|
@@ -149,7 +149,7 @@ describe('TreeCounter operations test1', () => {
|
|
|
149
149
|
expect(minNodeBySpecificNode?.key).toBe(14);
|
|
150
150
|
|
|
151
151
|
let subTreeSum = 0;
|
|
152
|
-
if (node15) treeCounter.dfs(node => (subTreeSum += node.key), 'PRE', 15);
|
|
152
|
+
if (node15) treeCounter.dfs(node => (subTreeSum += node.key), 'PRE', false, 15);
|
|
153
153
|
expect(subTreeSum).toBe(45);
|
|
154
154
|
let lesserSum = 0;
|
|
155
155
|
treeCounter.lesserOrGreaterTraverse(node => (lesserSum += node.key), -1, 10);
|
|
@@ -157,7 +157,7 @@ describe('TreeCounter operations test1', () => {
|
|
|
157
157
|
|
|
158
158
|
expect(node15 instanceof TreeCounterNode);
|
|
159
159
|
if (node15 instanceof TreeCounterNode) {
|
|
160
|
-
const subTreeAdd = treeCounter.dfs(node => (node.count += 1), 'PRE', 15);
|
|
160
|
+
const subTreeAdd = treeCounter.dfs(node => (node.count += 1), 'PRE', false, 15);
|
|
161
161
|
expect(subTreeAdd);
|
|
162
162
|
}
|
|
163
163
|
const node11 = treeCounter.getNode(11);
|
|
@@ -407,7 +407,7 @@ describe('TreeCounter operations test recursively1', () => {
|
|
|
407
407
|
expect(minNodeBySpecificNode?.key).toBe(14);
|
|
408
408
|
|
|
409
409
|
let subTreeSum = 0;
|
|
410
|
-
if (node15) treeCounter.dfs(node => (subTreeSum += node.key), 'PRE', 15);
|
|
410
|
+
if (node15) treeCounter.dfs(node => (subTreeSum += node.key), 'PRE', false, 15);
|
|
411
411
|
expect(subTreeSum).toBe(45);
|
|
412
412
|
let lesserSum = 0;
|
|
413
413
|
expect(treeCounter.has(9)).toBe(true);
|
|
@@ -423,7 +423,7 @@ describe('TreeCounter operations test recursively1', () => {
|
|
|
423
423
|
|
|
424
424
|
expect(node15 instanceof TreeCounterNode);
|
|
425
425
|
if (node15 instanceof TreeCounterNode) {
|
|
426
|
-
const subTreeAdd = treeCounter.dfs(node => (node.count += 1), 'PRE', 15);
|
|
426
|
+
const subTreeAdd = treeCounter.dfs(node => (node.count += 1), 'PRE', false, 15);
|
|
427
427
|
expect(subTreeAdd);
|
|
428
428
|
}
|
|
429
429
|
const node11 = treeCounter.getNode(11);
|
|
@@ -519,11 +519,11 @@ describe('TreeMultiMap 2', () => {
|
|
|
519
519
|
expect(tmm.isBST()).toBe(true);
|
|
520
520
|
expect(tmm.isBST(tmm.root, 'RECURSIVE')).toBe(true);
|
|
521
521
|
|
|
522
|
-
expect(tmm.dfs(n => n.key, 'IN', tmm.root, 'ITERATIVE')).toEqual([
|
|
522
|
+
expect(tmm.dfs(n => n.key, 'IN', false, tmm.root, 'ITERATIVE')).toEqual([
|
|
523
523
|
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,
|
|
524
524
|
77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
|
|
525
525
|
]);
|
|
526
|
-
expect(tmm.dfs(n => n.key, 'IN', tmm.root, 'RECURSIVE')).toEqual([
|
|
526
|
+
expect(tmm.dfs(n => n.key, 'IN', false, tmm.root, 'RECURSIVE')).toEqual([
|
|
527
527
|
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,
|
|
528
528
|
77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
|
|
529
529
|
]);
|
|
@@ -539,7 +539,7 @@ describe('TreeMultiMap 2', () => {
|
|
|
539
539
|
|
|
540
540
|
expect(tmm.size).toBe(0);
|
|
541
541
|
expect(tmm.isBST()).toBe(true);
|
|
542
|
-
expect(tmm.dfs(n => n.key, 'IN', tmm.root, 'ITERATIVE')).toEqual([]);
|
|
542
|
+
expect(tmm.dfs(n => n.key, 'IN', false, tmm.root, 'ITERATIVE')).toEqual([]);
|
|
543
543
|
|
|
544
544
|
tmm.clear();
|
|
545
545
|
for (let i = 0; i < 1000; i++) {
|
|
@@ -840,8 +840,8 @@ describe('classic use', () => {
|
|
|
840
840
|
// Test case for finding elements in a given range
|
|
841
841
|
it('@example Find elements in a range', () => {
|
|
842
842
|
const tmm = new TreeMultiMap<number>([10, 5, 15, 3, 7, 12, 18]);
|
|
843
|
-
expect(tmm.search(new Range(5, 10))).toEqual([5,
|
|
844
|
-
expect(tmm.search(new Range(4, 12))).toEqual([5, 10, 12
|
|
843
|
+
expect(tmm.search(new Range(5, 10))).toEqual([5, 7, 10]);
|
|
844
|
+
expect(tmm.search(new Range(4, 12))).toEqual([5, 7, 10, 12]);
|
|
845
845
|
expect(tmm.search(new Range(15, 20))).toEqual([15, 18]);
|
|
846
846
|
});
|
|
847
847
|
});
|