data-structure-typed 2.2.6 → 2.2.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/CONTRIBUTING.md +47 -1
- package/README.md +19 -8
- package/README_CN.md +119 -275
- package/benchmark/report.html +1 -1
- package/benchmark/report.json +20 -324
- package/dist/cjs/index.cjs +109 -107
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs-legacy/index.cjs +109 -107
- package/dist/cjs-legacy/index.cjs.map +1 -1
- package/dist/esm/index.mjs +109 -107
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm-legacy/index.mjs +109 -107
- package/dist/esm-legacy/index.mjs.map +1 -1
- package/dist/leetcode/avl-tree-counter.mjs +2957 -0
- package/dist/leetcode/avl-tree-multi-map.mjs +2889 -0
- package/dist/leetcode/avl-tree.mjs +2720 -0
- package/dist/leetcode/binary-tree.mjs +1594 -0
- package/dist/leetcode/bst.mjs +2398 -0
- package/dist/leetcode/deque.mjs +683 -0
- package/dist/leetcode/directed-graph.mjs +1733 -0
- package/dist/leetcode/doubly-linked-list.mjs +709 -0
- package/dist/leetcode/hash-map.mjs +493 -0
- package/dist/leetcode/heap.mjs +542 -0
- package/dist/leetcode/max-heap.mjs +375 -0
- package/dist/leetcode/max-priority-queue.mjs +383 -0
- package/dist/leetcode/min-heap.mjs +363 -0
- package/dist/leetcode/min-priority-queue.mjs +371 -0
- package/dist/leetcode/priority-queue.mjs +363 -0
- package/dist/leetcode/queue.mjs +943 -0
- package/dist/leetcode/red-black-tree.mjs +2765 -0
- package/dist/leetcode/singly-linked-list.mjs +754 -0
- package/dist/leetcode/stack.mjs +217 -0
- package/dist/leetcode/tree-counter.mjs +3039 -0
- package/dist/leetcode/tree-multi-map.mjs +2913 -0
- package/dist/leetcode/trie.mjs +413 -0
- package/dist/leetcode/undirected-graph.mjs +1650 -0
- package/dist/types/data-structures/binary-tree/avl-tree-counter.d.ts +1 -1
- package/dist/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +2 -2
- package/dist/types/data-structures/binary-tree/avl-tree.d.ts +10 -10
- package/dist/types/data-structures/binary-tree/binary-tree.d.ts +22 -23
- package/dist/types/data-structures/binary-tree/bst.d.ts +11 -11
- package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +1 -1
- package/dist/types/data-structures/binary-tree/tree-counter.d.ts +1 -1
- package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +2 -2
- package/dist/umd/data-structure-typed.js +105 -103
- package/dist/umd/data-structure-typed.js.map +1 -1
- package/dist/umd/data-structure-typed.min.js +2 -2
- package/dist/umd/data-structure-typed.min.js.map +1 -1
- package/package.json +48 -171
- package/src/data-structures/binary-tree/avl-tree-counter.ts +6 -6
- package/src/data-structures/binary-tree/avl-tree-multi-map.ts +13 -13
- package/src/data-structures/binary-tree/avl-tree.ts +15 -15
- package/src/data-structures/binary-tree/binary-tree.ts +53 -55
- package/src/data-structures/binary-tree/bst.ts +21 -22
- package/src/data-structures/binary-tree/red-black-tree.ts +3 -3
- package/src/data-structures/binary-tree/tree-counter.ts +4 -4
- package/src/data-structures/binary-tree/tree-multi-map.ts +13 -13
- package/test/performance/data-structures/binary-tree/red-black-tree.test.ts +1 -2
- package/test/unit/data-structures/binary-tree/avl-tree-counter.test.ts +30 -30
- package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +46 -46
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +43 -43
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +151 -151
- package/test/unit/data-structures/binary-tree/bst.test.ts +99 -99
- package/test/unit/data-structures/binary-tree/overall.test.ts +20 -20
- package/test/unit/data-structures/binary-tree/red-black-tree.test.ts +141 -141
- package/test/unit/data-structures/binary-tree/tree-counter.test.ts +37 -37
- package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +145 -145
- package/tsup.config.js +50 -21
- package/tsup.leetcode.config.js +1 -1
- package/tsup.umd.config.js +29 -0
- package/tsup.node.config.js +0 -83
|
@@ -12,7 +12,7 @@ describe('TreeCounter count', () => {
|
|
|
12
12
|
});
|
|
13
13
|
|
|
14
14
|
it('Should added node count ', () => {
|
|
15
|
-
treeCounter.
|
|
15
|
+
treeCounter.setMany([
|
|
16
16
|
[1, 1],
|
|
17
17
|
[2, 2],
|
|
18
18
|
[3, 3],
|
|
@@ -20,14 +20,14 @@ describe('TreeCounter count', () => {
|
|
|
20
20
|
[5, 5]
|
|
21
21
|
]);
|
|
22
22
|
const newNode = new TreeCounterNode(3, 33, 10);
|
|
23
|
-
treeCounter.
|
|
23
|
+
treeCounter.set(newNode);
|
|
24
24
|
expect(treeCounter.count).toBe(15);
|
|
25
25
|
expect(treeCounter.getComputedCount()).toBe(15);
|
|
26
26
|
expect(treeCounter.getNode(3)?.count).toBe(11);
|
|
27
27
|
});
|
|
28
28
|
|
|
29
29
|
it('Should count', () => {
|
|
30
|
-
treeCounter.
|
|
30
|
+
treeCounter.setMany([
|
|
31
31
|
[1, 1],
|
|
32
32
|
[2, 2],
|
|
33
33
|
[3, 3]
|
|
@@ -44,7 +44,7 @@ describe('TreeCounter operations test1', () => {
|
|
|
44
44
|
expect(treeCounter.getHeight()).toBe(-1);
|
|
45
45
|
expect(treeCounter.getMinHeight()).toBe(-1);
|
|
46
46
|
|
|
47
|
-
treeCounter.
|
|
47
|
+
treeCounter.setMany([1, 6, 7, 2, 3, 4, 9, 11, 8, 5, 10, 12, 16, 14, 13, 15]);
|
|
48
48
|
// treeCounter.print()
|
|
49
49
|
expect(treeCounter.getHeight()).toBe(5);
|
|
50
50
|
expect(treeCounter.getMinHeight()).toBe(2);
|
|
@@ -55,8 +55,8 @@ describe('TreeCounter operations test1', () => {
|
|
|
55
55
|
|
|
56
56
|
expect(treeCounter instanceof TreeCounter);
|
|
57
57
|
|
|
58
|
-
treeCounter.
|
|
59
|
-
treeCounter.
|
|
58
|
+
treeCounter.set([11, 11]);
|
|
59
|
+
treeCounter.set([3, 3]);
|
|
60
60
|
expect(treeCounter.count).toBe(2);
|
|
61
61
|
expect(treeCounter.getComputedCount()).toBe(2);
|
|
62
62
|
expect(treeCounter.size).toBe(2);
|
|
@@ -80,7 +80,7 @@ describe('TreeCounter operations test1', () => {
|
|
|
80
80
|
[5, 5]
|
|
81
81
|
];
|
|
82
82
|
|
|
83
|
-
treeCounter.
|
|
83
|
+
treeCounter.setMany(keyValuePairs);
|
|
84
84
|
expect(treeCounter.size).toBe(16);
|
|
85
85
|
expect(treeCounter.count).toBe(18);
|
|
86
86
|
expect(treeCounter.getComputedCount()).toBe(18);
|
|
@@ -97,8 +97,8 @@ describe('TreeCounter operations test1', () => {
|
|
|
97
97
|
|
|
98
98
|
expect(treeCounter instanceof TreeCounter);
|
|
99
99
|
|
|
100
|
-
treeCounter.
|
|
101
|
-
treeCounter.
|
|
100
|
+
treeCounter.set([11, 11]);
|
|
101
|
+
treeCounter.set([3, 3]);
|
|
102
102
|
const idAndValues: [number, number][] = [
|
|
103
103
|
[11, 11],
|
|
104
104
|
[3, 3],
|
|
@@ -117,7 +117,7 @@ describe('TreeCounter operations test1', () => {
|
|
|
117
117
|
[10, 10],
|
|
118
118
|
[5, 5]
|
|
119
119
|
];
|
|
120
|
-
treeCounter.
|
|
120
|
+
treeCounter.setMany(idAndValues);
|
|
121
121
|
expect(treeCounter.root instanceof TreeCounterNode);
|
|
122
122
|
|
|
123
123
|
if (treeCounter.root) expect(treeCounter.root.key == 11);
|
|
@@ -316,8 +316,8 @@ describe('TreeCounter operations test1', () => {
|
|
|
316
316
|
it('should perform various operations on a TreeCounter with object values', () => {
|
|
317
317
|
const objTreeCounter = new TreeCounter<number, { key: number; keyA: number }>();
|
|
318
318
|
expect(objTreeCounter).toBeInstanceOf(TreeCounter);
|
|
319
|
-
objTreeCounter.
|
|
320
|
-
objTreeCounter.
|
|
319
|
+
objTreeCounter.set([11, { key: 11, keyA: 11 }]);
|
|
320
|
+
objTreeCounter.set([3, { key: 3, keyA: 3 }]);
|
|
321
321
|
const values: [number, { key: number; keyA: number }][] = [
|
|
322
322
|
[15, { key: 15, keyA: 15 }],
|
|
323
323
|
[1, { key: 1, keyA: 1 }],
|
|
@@ -335,7 +335,7 @@ describe('TreeCounter operations test1', () => {
|
|
|
335
335
|
[5, { key: 5, keyA: 5 }]
|
|
336
336
|
];
|
|
337
337
|
|
|
338
|
-
objTreeCounter.
|
|
338
|
+
objTreeCounter.setMany(values);
|
|
339
339
|
|
|
340
340
|
expect(objTreeCounter.root).toBeInstanceOf(TreeCounterNode);
|
|
341
341
|
|
|
@@ -355,8 +355,8 @@ describe('TreeCounter operations test recursively1', () => {
|
|
|
355
355
|
});
|
|
356
356
|
|
|
357
357
|
expect(treeCounter instanceof TreeCounter);
|
|
358
|
-
treeCounter.
|
|
359
|
-
treeCounter.
|
|
358
|
+
treeCounter.set([11, 11]);
|
|
359
|
+
treeCounter.set([3, 3]);
|
|
360
360
|
const idAndValues: [number, number][] = [
|
|
361
361
|
[11, 11],
|
|
362
362
|
[3, 3],
|
|
@@ -375,7 +375,7 @@ describe('TreeCounter operations test recursively1', () => {
|
|
|
375
375
|
[10, 10],
|
|
376
376
|
[5, 5]
|
|
377
377
|
];
|
|
378
|
-
treeCounter.
|
|
378
|
+
treeCounter.setMany(idAndValues);
|
|
379
379
|
expect(treeCounter.root).toBeInstanceOf(TreeCounterNode);
|
|
380
380
|
|
|
381
381
|
if (treeCounter.root) expect(treeCounter.root.key).toBe(5);
|
|
@@ -583,8 +583,8 @@ describe('TreeCounter operations test recursively1', () => {
|
|
|
583
583
|
it('should perform various operations on a TreeCounter with object values', () => {
|
|
584
584
|
const objTreeCounter = new TreeCounter<number, { key: number; keyA: number }>();
|
|
585
585
|
expect(objTreeCounter).toBeInstanceOf(TreeCounter);
|
|
586
|
-
objTreeCounter.
|
|
587
|
-
objTreeCounter.
|
|
586
|
+
objTreeCounter.set([11, { key: 11, keyA: 11 }]);
|
|
587
|
+
objTreeCounter.set([3, { key: 3, keyA: 3 }]);
|
|
588
588
|
const values: [number, { key: number; keyA: number }][] = [
|
|
589
589
|
[15, { key: 15, keyA: 15 }],
|
|
590
590
|
[1, { key: 1, keyA: 1 }],
|
|
@@ -602,7 +602,7 @@ describe('TreeCounter operations test recursively1', () => {
|
|
|
602
602
|
[5, { key: 5, keyA: 5 }]
|
|
603
603
|
];
|
|
604
604
|
|
|
605
|
-
objTreeCounter.
|
|
605
|
+
objTreeCounter.setMany(values);
|
|
606
606
|
|
|
607
607
|
expect(objTreeCounter.root).toBeInstanceOf(TreeCounterNode);
|
|
608
608
|
|
|
@@ -631,7 +631,7 @@ describe('TreeCounter delete test', function () {
|
|
|
631
631
|
|
|
632
632
|
it('The structure remains normal after random deletion', function () {
|
|
633
633
|
for (let i = 0; i < inputSize; i++) {
|
|
634
|
-
treeCounter.
|
|
634
|
+
treeCounter.set(i);
|
|
635
635
|
}
|
|
636
636
|
|
|
637
637
|
expect(treeCounter.size).toBe(inputSize);
|
|
@@ -660,7 +660,7 @@ describe('TreeCounter delete test', function () {
|
|
|
660
660
|
for (let i = 0; i < inputSize; i++) {
|
|
661
661
|
const num = getRandomInt(0, inputSize - 1);
|
|
662
662
|
if (i === 0 && isDebug) console.log(`first:`, num);
|
|
663
|
-
treeCounter.
|
|
663
|
+
treeCounter.set(num);
|
|
664
664
|
}
|
|
665
665
|
|
|
666
666
|
for (let i = 0; i < inputSize; i++) {
|
|
@@ -686,7 +686,7 @@ describe('TreeCounter delete test', function () {
|
|
|
686
686
|
for (let i = 0; i < inputSize; i++) {
|
|
687
687
|
const num = getRandomInt(0, inputSize - 1);
|
|
688
688
|
if (i === 0 && isDebug) console.log(`first:`, num);
|
|
689
|
-
treeCounter.
|
|
689
|
+
treeCounter.set(num);
|
|
690
690
|
}
|
|
691
691
|
|
|
692
692
|
for (let i = 0; i < inputSize; i++) {
|
|
@@ -721,7 +721,7 @@ describe('TreeCounter delete test', function () {
|
|
|
721
721
|
}
|
|
722
722
|
|
|
723
723
|
const treeCounter = new TreeCounter<string, number>();
|
|
724
|
-
treeCounter.
|
|
724
|
+
treeCounter.setMany([
|
|
725
725
|
['2', 2],
|
|
726
726
|
['4', 4],
|
|
727
727
|
['5', 5],
|
|
@@ -750,9 +750,9 @@ describe('TreeCounter iterative methods test', () => {
|
|
|
750
750
|
let treeCounter: TreeCounter<number, string>;
|
|
751
751
|
beforeEach(() => {
|
|
752
752
|
treeCounter = new TreeCounter<number, string>();
|
|
753
|
-
treeCounter.
|
|
754
|
-
treeCounter.
|
|
755
|
-
treeCounter.
|
|
753
|
+
treeCounter.set(1, 'a', 10);
|
|
754
|
+
treeCounter.set([2, 'b'], undefined, 10);
|
|
755
|
+
treeCounter.set([3, 'c'], undefined, 1);
|
|
756
756
|
});
|
|
757
757
|
|
|
758
758
|
it('The node obtained by get Node should match the node type', () => {
|
|
@@ -845,7 +845,7 @@ describe('TreeCounter count not map mode', () => {
|
|
|
845
845
|
});
|
|
846
846
|
|
|
847
847
|
it('Should added node count ', () => {
|
|
848
|
-
treeCounter.
|
|
848
|
+
treeCounter.setMany([
|
|
849
849
|
[1, 1],
|
|
850
850
|
[2, 2],
|
|
851
851
|
[3, 3],
|
|
@@ -853,7 +853,7 @@ describe('TreeCounter count not map mode', () => {
|
|
|
853
853
|
[5, 5]
|
|
854
854
|
]);
|
|
855
855
|
const newNode = new TreeCounterNode(3, undefined, 10);
|
|
856
|
-
treeCounter.
|
|
856
|
+
treeCounter.set(newNode, 33, 20);
|
|
857
857
|
// TODO expect(treeCounter.count).toBe(25);
|
|
858
858
|
expect(treeCounter.count).toBe(15);
|
|
859
859
|
expect(treeCounter.getComputedCount()).toBe(15);
|
|
@@ -867,8 +867,8 @@ describe('TreeCounter operations test1 not map mode', () => {
|
|
|
867
867
|
|
|
868
868
|
expect(treeCounter instanceof TreeCounter);
|
|
869
869
|
|
|
870
|
-
treeCounter.
|
|
871
|
-
treeCounter.
|
|
870
|
+
treeCounter.set([11, 11]);
|
|
871
|
+
treeCounter.set([3, 3]);
|
|
872
872
|
const idAndValues: [number, number][] = [
|
|
873
873
|
[11, 11],
|
|
874
874
|
[3, 3],
|
|
@@ -887,7 +887,7 @@ describe('TreeCounter operations test1 not map mode', () => {
|
|
|
887
887
|
[10, 10],
|
|
888
888
|
[5, 5]
|
|
889
889
|
];
|
|
890
|
-
treeCounter.
|
|
890
|
+
treeCounter.setMany(idAndValues);
|
|
891
891
|
expect(treeCounter.root instanceof TreeCounterNode);
|
|
892
892
|
|
|
893
893
|
if (treeCounter.root) expect(treeCounter.root.key == 11);
|
|
@@ -916,8 +916,8 @@ describe('TreeCounter operations test recursively1 not map mode', () => {
|
|
|
916
916
|
});
|
|
917
917
|
|
|
918
918
|
expect(treeCounter instanceof TreeCounter);
|
|
919
|
-
treeCounter.
|
|
920
|
-
treeCounter.
|
|
919
|
+
treeCounter.set([11, 11]);
|
|
920
|
+
treeCounter.set([3, 3]);
|
|
921
921
|
const idAndValues: [number, number][] = [
|
|
922
922
|
[11, 11],
|
|
923
923
|
[3, 3],
|
|
@@ -936,7 +936,7 @@ describe('TreeCounter operations test recursively1 not map mode', () => {
|
|
|
936
936
|
[10, 10],
|
|
937
937
|
[5, 5]
|
|
938
938
|
];
|
|
939
|
-
treeCounter.
|
|
939
|
+
treeCounter.setMany(idAndValues);
|
|
940
940
|
expect(treeCounter.root).toBeInstanceOf(TreeCounterNode);
|
|
941
941
|
|
|
942
942
|
if (treeCounter.root) expect(treeCounter.root.key).toBe(5);
|
|
@@ -961,9 +961,9 @@ describe('TreeCounter iterative methods test not map mode', () => {
|
|
|
961
961
|
let treeCounter: TreeCounter<number, string>;
|
|
962
962
|
beforeEach(() => {
|
|
963
963
|
treeCounter = new TreeCounter<number, string>([], { isMapMode: false });
|
|
964
|
-
treeCounter.
|
|
965
|
-
treeCounter.
|
|
966
|
-
treeCounter.
|
|
964
|
+
treeCounter.set(1, 'a', 10);
|
|
965
|
+
treeCounter.set([2, 'b'], undefined, 10);
|
|
966
|
+
treeCounter.set([3, 'c'], undefined, 1);
|
|
967
967
|
});
|
|
968
968
|
|
|
969
969
|
it('should clone work well', () => {
|