data-structure-typed 2.2.7 → 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.
Files changed (70) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +14 -3
  3. package/README_CN.md +119 -275
  4. package/benchmark/report.html +1 -1
  5. package/benchmark/report.json +20 -324
  6. package/dist/cjs/index.cjs +106 -107
  7. package/dist/cjs/index.cjs.map +1 -1
  8. package/dist/cjs-legacy/index.cjs +106 -107
  9. package/dist/cjs-legacy/index.cjs.map +1 -1
  10. package/dist/esm/index.mjs +106 -107
  11. package/dist/esm/index.mjs.map +1 -1
  12. package/dist/esm-legacy/index.mjs +106 -107
  13. package/dist/esm-legacy/index.mjs.map +1 -1
  14. package/dist/leetcode/avl-tree-counter.mjs +2957 -0
  15. package/dist/leetcode/avl-tree-multi-map.mjs +2889 -0
  16. package/dist/leetcode/avl-tree.mjs +2720 -0
  17. package/dist/leetcode/binary-tree.mjs +1594 -0
  18. package/dist/leetcode/bst.mjs +2398 -0
  19. package/dist/leetcode/deque.mjs +683 -0
  20. package/dist/leetcode/directed-graph.mjs +1733 -0
  21. package/dist/leetcode/doubly-linked-list.mjs +709 -0
  22. package/dist/leetcode/hash-map.mjs +493 -0
  23. package/dist/leetcode/heap.mjs +542 -0
  24. package/dist/leetcode/max-heap.mjs +375 -0
  25. package/dist/leetcode/max-priority-queue.mjs +383 -0
  26. package/dist/leetcode/min-heap.mjs +363 -0
  27. package/dist/leetcode/min-priority-queue.mjs +371 -0
  28. package/dist/leetcode/priority-queue.mjs +363 -0
  29. package/dist/leetcode/queue.mjs +943 -0
  30. package/dist/leetcode/red-black-tree.mjs +2765 -0
  31. package/dist/leetcode/singly-linked-list.mjs +754 -0
  32. package/dist/leetcode/stack.mjs +217 -0
  33. package/dist/leetcode/tree-counter.mjs +3039 -0
  34. package/dist/leetcode/tree-multi-map.mjs +2913 -0
  35. package/dist/leetcode/trie.mjs +413 -0
  36. package/dist/leetcode/undirected-graph.mjs +1650 -0
  37. package/dist/types/data-structures/binary-tree/avl-tree-counter.d.ts +1 -1
  38. package/dist/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +2 -2
  39. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +10 -10
  40. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +22 -23
  41. package/dist/types/data-structures/binary-tree/bst.d.ts +11 -11
  42. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +1 -1
  43. package/dist/types/data-structures/binary-tree/tree-counter.d.ts +1 -1
  44. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +2 -2
  45. package/dist/umd/data-structure-typed.js +102 -103
  46. package/dist/umd/data-structure-typed.js.map +1 -1
  47. package/dist/umd/data-structure-typed.min.js +2 -2
  48. package/dist/umd/data-structure-typed.min.js.map +1 -1
  49. package/package.json +48 -171
  50. package/src/data-structures/binary-tree/avl-tree-counter.ts +6 -6
  51. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +13 -13
  52. package/src/data-structures/binary-tree/avl-tree.ts +15 -15
  53. package/src/data-structures/binary-tree/binary-tree.ts +53 -55
  54. package/src/data-structures/binary-tree/bst.ts +21 -22
  55. package/src/data-structures/binary-tree/red-black-tree.ts +3 -3
  56. package/src/data-structures/binary-tree/tree-counter.ts +4 -4
  57. package/src/data-structures/binary-tree/tree-multi-map.ts +13 -13
  58. package/test/performance/data-structures/binary-tree/red-black-tree.test.ts +1 -2
  59. package/test/unit/data-structures/binary-tree/avl-tree-counter.test.ts +30 -30
  60. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +46 -46
  61. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +43 -43
  62. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +151 -151
  63. package/test/unit/data-structures/binary-tree/bst.test.ts +99 -99
  64. package/test/unit/data-structures/binary-tree/overall.test.ts +20 -20
  65. package/test/unit/data-structures/binary-tree/red-black-tree.test.ts +141 -141
  66. package/test/unit/data-structures/binary-tree/tree-counter.test.ts +37 -37
  67. package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +145 -145
  68. package/tsup.config.js +50 -21
  69. package/tsup.umd.config.js +29 -0
  70. package/tsup.node.config.js +0 -83
@@ -6,25 +6,25 @@ const isDebug = isDebugTest;
6
6
  describe('BST operations test', () => {
7
7
  it('should add undefined and null', () => {
8
8
  const bst = new BST<number, string>();
9
- const isAddUndefined = bst.add(undefined);
9
+ const isAddUndefined = bst.set(undefined);
10
10
  expect(isAddUndefined).toBe(false);
11
11
  expect(bst.get(undefined)).toBe(undefined);
12
- const isAddNull = bst.add(null);
12
+ const isAddNull = bst.set(null);
13
13
  expect(isAddNull).toBe(false);
14
14
  expect(bst.get(null)).toBe(undefined);
15
- const isAdd0 = bst.add(0, '0');
15
+ const isAdd0 = bst.set(0, '0');
16
16
  expect(isAdd0).toBe(true);
17
17
  expect(bst.get(0)).toBe('0');
18
18
  });
19
19
 
20
20
  it('should addMany undefined and null', () => {
21
21
  const bst = new BST<number, string>();
22
- const addManyWithUndefined = bst.addMany([1, undefined, 3]);
22
+ const addManyWithUndefined = bst.setMany([1, undefined, 3]);
23
23
  expect(addManyWithUndefined).toEqual([true, false, true]);
24
24
  expect(bst.get(undefined)).toBe(undefined);
25
- const addManyWithNull = bst.addMany([1, null, 3, 4]);
25
+ const addManyWithNull = bst.setMany([1, null, 3, 4]);
26
26
  expect(addManyWithNull).toEqual([true, false, true, true]);
27
- const addManyEntriesWithNull = bst.addMany([
27
+ const addManyEntriesWithNull = bst.setMany([
28
28
  [1, '1'],
29
29
  [null, 'null'],
30
30
  [3, '3'],
@@ -32,7 +32,7 @@ describe('BST operations test', () => {
32
32
  ]);
33
33
  expect(addManyEntriesWithNull).toEqual([true, false, true, true]);
34
34
  expect(bst.get(null)).toBe(undefined);
35
- const node0 = bst.add(0, '0');
35
+ const node0 = bst.set(0, '0');
36
36
  expect(node0).toBe(true);
37
37
  expect(bst.get(0)).toBe('0');
38
38
  });
@@ -40,8 +40,8 @@ describe('BST operations test', () => {
40
40
  it('should perform various operations on a Binary Search Tree with numeric values', () => {
41
41
  const bst = new BST<number, number>();
42
42
  expect(bst).toBeInstanceOf(BST);
43
- bst.add([11, 11]);
44
- bst.add([3, 3]);
43
+ bst.set([11, 11]);
44
+ bst.set([3, 3]);
45
45
  const idsAndValues: [number, number][] = [
46
46
  [15, 15],
47
47
  [1, 1],
@@ -58,7 +58,7 @@ describe('BST operations test', () => {
58
58
  [10, 10],
59
59
  [5, 5]
60
60
  ];
61
- bst.addMany(idsAndValues, [], false);
61
+ bst.setMany(idsAndValues, [], false);
62
62
  expect(bst.root).toBeInstanceOf(BSTNode);
63
63
 
64
64
  if (bst.root) expect(bst.root.key).toBe(11);
@@ -247,10 +247,10 @@ describe('BST operations test', () => {
247
247
  it('should perform various operations on a Binary Search Tree with object values', () => {
248
248
  const objBST = new BST<number, { name: string; age: number }>();
249
249
  expect(objBST).toBeInstanceOf(BST);
250
- objBST.add([11, { name: '11', age: 11 }]);
251
- objBST.add([3, { name: '3', age: 3 }]);
250
+ objBST.set([11, { name: '11', age: 11 }]);
251
+ objBST.set([3, { name: '3', age: 3 }]);
252
252
 
253
- objBST.addMany(
253
+ objBST.setMany(
254
254
  [15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5],
255
255
  [
256
256
  { name: 'Alice', age: 15 },
@@ -474,17 +474,17 @@ describe('BST operations test', () => {
474
474
  const tree = new BST<number, string>([4, 5, [1, '1'], 2, 3], { isMapMode: false });
475
475
  expect(tree.get(1)).toBe('1');
476
476
  expect(tree.getNode(1)?.value).toBe('1');
477
- tree.add(1, 'a');
477
+ tree.set(1, 'a');
478
478
  expect(tree.get(1)).toBe('a');
479
- tree.add([1, 'b']);
479
+ tree.set([1, 'b']);
480
480
  expect(tree.getNode(1)?.value).toBe('b');
481
481
  expect(tree.get(1)).toBe('b');
482
482
  const treeMap = new BST<number>([4, 5, [1, '1'], 2, 3]);
483
483
  expect(treeMap.get(1)).toBe('1');
484
484
  expect(treeMap.getNode(1)?.value).toBe(undefined);
485
- treeMap.add(1, 'a');
485
+ treeMap.set(1, 'a');
486
486
  expect(treeMap.get(1)).toBe('a');
487
- treeMap.add([1, 'b']);
487
+ treeMap.set([1, 'b']);
488
488
  expect(treeMap.getNode(1)?.value).toBe(undefined);
489
489
  expect(treeMap.get(1)).toBe('b');
490
490
  });
@@ -502,10 +502,10 @@ describe('BST operations test recursively', () => {
502
502
  iterationType: 'RECURSIVE'
503
503
  });
504
504
  expect(bst).toBeInstanceOf(BST);
505
- bst.add([11, 11]);
506
- bst.add([3, 3]);
505
+ bst.set([11, 11]);
506
+ bst.set([3, 3]);
507
507
  const idsAndValues = [15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];
508
- bst.addMany(idsAndValues, undefined, false);
508
+ bst.setMany(idsAndValues, undefined, false);
509
509
  expect(bst.root).toBeInstanceOf(BSTNode);
510
510
 
511
511
  if (bst.root) expect(bst.root.key).toBe(11);
@@ -687,8 +687,8 @@ describe('BST operations test recursively', () => {
687
687
  it('should perform various operations on a Binary Search Tree with object values', () => {
688
688
  const objBST = new BST<number, { key: number; keyA: number }>();
689
689
  expect(objBST).toBeInstanceOf(BST);
690
- objBST.add([11, { key: 11, keyA: 11 }]);
691
- objBST.add([3, { key: 3, keyA: 3 }]);
690
+ objBST.set([11, { key: 11, keyA: 11 }]);
691
+ objBST.set([3, { key: 3, keyA: 3 }]);
692
692
  const entries: [number, { key: number; keyA: number }][] = [
693
693
  [15, { key: 15, keyA: 15 }],
694
694
  [1, { key: 1, keyA: 1 }],
@@ -706,7 +706,7 @@ describe('BST operations test recursively', () => {
706
706
  [5, { key: 5, keyA: 5 }]
707
707
  ];
708
708
 
709
- objBST.addMany(entries, undefined, false);
709
+ objBST.setMany(entries, undefined, false);
710
710
 
711
711
  expect(objBST.root).toBeInstanceOf(BSTNode);
712
712
 
@@ -893,7 +893,7 @@ describe('BST operations test recursively', () => {
893
893
 
894
894
  it('should delete', () => {
895
895
  const numBST = new BST<number>();
896
- numBST.addMany([2, 4, 5, 3, 1]);
896
+ numBST.setMany([2, 4, 5, 3, 1]);
897
897
  expect(numBST.size).toBe(5);
898
898
  numBST.delete(1);
899
899
  expect(numBST.size).toBe(4);
@@ -909,7 +909,7 @@ describe('BST operations test recursively', () => {
909
909
 
910
910
  it('should listLevels', () => {
911
911
  const bst = new BST<number>();
912
- bst.addMany([2, 4, 5, 3, 1]);
912
+ bst.setMany([2, 4, 5, 3, 1]);
913
913
  expect(bst.size).toBe(5);
914
914
  bst.delete(1);
915
915
  bst.delete(5);
@@ -921,7 +921,7 @@ describe('BST operations test recursively', () => {
921
921
  const bst = new BST<number>();
922
922
  const levelKeys = bst.lesserOrGreaterTraverse();
923
923
  expect(levelKeys).toEqual([]);
924
- bst.addMany([2, 4, 5, 3, 1]);
924
+ bst.setMany([2, 4, 5, 3, 1]);
925
925
  expect(bst.size).toBe(5);
926
926
  bst.delete(1);
927
927
  bst.delete(5);
@@ -942,7 +942,7 @@ describe('BST operations test recursively', () => {
942
942
  }
943
943
 
944
944
  const bst = new BST<string, number>();
945
- bst.addMany([
945
+ bst.setMany([
946
946
  ['2', 2],
947
947
  ['4', 4],
948
948
  ['5', 5],
@@ -980,7 +980,7 @@ describe('BST operations test recursively', () => {
980
980
  if (isTestStackOverflow) {
981
981
  it('should getLeftMost', () => {
982
982
  const bst = new BST<number>([]);
983
- for (let i = 1; i <= SYSTEM_MAX_CALL_STACK; i++) bst.add(i);
983
+ for (let i = 1; i <= SYSTEM_MAX_CALL_STACK; i++) bst.set(i);
984
984
 
985
985
  expect(() => {
986
986
  const leftMost = bst.getLeftMost(node => node, bst.root, 'RECURSIVE');
@@ -993,7 +993,7 @@ describe('BST operations test recursively', () => {
993
993
 
994
994
  it('should getRightMost', () => {
995
995
  const bst = new BST<number>();
996
- for (let i = 1; i <= SYSTEM_MAX_CALL_STACK; i++) bst.add(i);
996
+ for (let i = 1; i <= SYSTEM_MAX_CALL_STACK; i++) bst.set(i);
997
997
 
998
998
  expect(() => {
999
999
  const rightMost = bst.getRightMost(node => node, bst.root, 'RECURSIVE');
@@ -1008,7 +1008,7 @@ describe('BST operations test recursively', () => {
1008
1008
  describe('BST isBST', function () {
1009
1009
  it('isBST', () => {
1010
1010
  const bst = new BST<number, number>();
1011
- bst.addMany([1, 2, 3, 9, 8, 5, 6, 7, 4]);
1011
+ bst.setMany([1, 2, 3, 9, 8, 5, 6, 7, 4]);
1012
1012
  expect(bst.isBST()).toBe(true);
1013
1013
  });
1014
1014
 
@@ -1016,7 +1016,7 @@ describe('BST isBST', function () {
1016
1016
  const bst = new BST<number, number>([1, 2, 3, 9, 8, 5, 6, 7, 4], {
1017
1017
  comparator: (a, b) => b - a
1018
1018
  });
1019
- bst.addMany([1, 2, 3, 9, 8, 5, 6, 7, 4]);
1019
+ bst.setMany([1, 2, 3, 9, 8, 5, 6, 7, 4]);
1020
1020
  expect(bst.isBST()).toBe(true);
1021
1021
  });
1022
1022
  });
@@ -1041,7 +1041,7 @@ describe('BST Performance test', function () {
1041
1041
  nodes.push(i);
1042
1042
  }
1043
1043
  const start = performance.now();
1044
- bst.addMany(nodes);
1044
+ bst.setMany(nodes);
1045
1045
  if (isDebug) console.log('---add', performance.now() - start);
1046
1046
  const startL = performance.now();
1047
1047
  bst.lesserOrGreaterTraverse(
@@ -1060,7 +1060,7 @@ describe('BST Performance test', function () {
1060
1060
  nodes.push(i);
1061
1061
  }
1062
1062
  const start = performance.now();
1063
- bst.addMany(nodes);
1063
+ bst.setMany(nodes);
1064
1064
  if (isDebug) console.log('---add', performance.now() - start);
1065
1065
  const startL = performance.now();
1066
1066
  const arr: number[][] = bst.listLevels(node => node.key);
@@ -1070,14 +1070,14 @@ describe('BST Performance test', function () {
1070
1070
 
1071
1071
  it('should the lastKey of a BST to be the largest key', function () {
1072
1072
  const bst = new BST();
1073
- bst.addMany([9, 8, 7, 3, 1, 2, 5, 4, 6], undefined, false);
1073
+ bst.setMany([9, 8, 7, 3, 1, 2, 5, 4, 6], undefined, false);
1074
1074
  // TODO
1075
1075
  // expect(bst.lastKey()).toBe(9);
1076
1076
  });
1077
1077
 
1078
1078
  it('should dfs as sub tree traversal, null should be ignored', () => {
1079
1079
  const bst = new BST();
1080
- bst.addMany([4, 2, 6, 1, 3, 5, 7]);
1080
+ bst.setMany([4, 2, 6, 1, 3, 5, 7]);
1081
1081
  expect(bst.dfs(node => node.key, 'PRE', false, bst.getNode(6), 'ITERATIVE')).toEqual([6, 5, 7]);
1082
1082
  expect(bst.dfs(node => node.key, 'PRE', false, bst.getNode(6), 'RECURSIVE')).toEqual([6, 5, 7]);
1083
1083
  expect(bst.dfs(node => node?.key ?? undefined, 'PRE', false, bst.getNode(6), 'ITERATIVE')).toEqual([6, 5, 7]);
@@ -1089,7 +1089,7 @@ describe('BST iterative methods test', () => {
1089
1089
  let bst: BST<number, string>;
1090
1090
  beforeEach(() => {
1091
1091
  bst = new BST();
1092
- bst.addMany(
1092
+ bst.setMany(
1093
1093
  [
1094
1094
  [1, 'a'],
1095
1095
  [2, 'b'],
@@ -1179,7 +1179,7 @@ describe('BST iterative methods test', () => {
1179
1179
 
1180
1180
  it('should collapsed, unbalanced, balanced bst leaves', () => {
1181
1181
  const collapsedToLinkedList = new BST();
1182
- collapsedToLinkedList.addMany(
1182
+ collapsedToLinkedList.setMany(
1183
1183
  [
1184
1184
  [1, 'a'],
1185
1185
  [2, 'b'],
@@ -1198,7 +1198,7 @@ describe('BST iterative methods test', () => {
1198
1198
  expect(collapsedToLinkedList.leaves()).toEqual([9]);
1199
1199
 
1200
1200
  const unbalanced = new BST();
1201
- unbalanced.addMany(
1201
+ unbalanced.setMany(
1202
1202
  [
1203
1203
  [2, 'b'],
1204
1204
  [1, 'a'],
@@ -1217,7 +1217,7 @@ describe('BST iterative methods test', () => {
1217
1217
  expect(unbalanced.leaves()).toEqual([1, 9]);
1218
1218
 
1219
1219
  const balanced = new BST();
1220
- balanced.addMany(
1220
+ balanced.setMany(
1221
1221
  [
1222
1222
  [2, 'b'],
1223
1223
  [1, 'a'],
@@ -1242,8 +1242,8 @@ describe('BST operations not map mode test', () => {
1242
1242
  it('should perform various operations on a Binary Search Tree with numeric values', () => {
1243
1243
  const bst = new BST<number, number>([], { isMapMode: false });
1244
1244
  expect(bst).toBeInstanceOf(BST);
1245
- bst.add([11, 11]);
1246
- bst.add([3, 3]);
1245
+ bst.set([11, 11]);
1246
+ bst.set([3, 3]);
1247
1247
  const idsAndValues: [number, number][] = [
1248
1248
  [15, 15],
1249
1249
  [1, 1],
@@ -1260,7 +1260,7 @@ describe('BST operations not map mode test', () => {
1260
1260
  [10, 10],
1261
1261
  [5, 5]
1262
1262
  ];
1263
- bst.addMany(idsAndValues, undefined, false);
1263
+ bst.setMany(idsAndValues, undefined, false);
1264
1264
  expect(bst.root).toBeInstanceOf(BSTNode);
1265
1265
 
1266
1266
  if (bst.root) expect(bst.root.key).toBe(11);
@@ -1295,10 +1295,10 @@ describe('BST operations not map mode test', () => {
1295
1295
  it('should perform various operations on a Binary Search Tree with object values', () => {
1296
1296
  const objBST = new BST<number, { name: string; age: number }>([], { isMapMode: false });
1297
1297
  expect(objBST).toBeInstanceOf(BST);
1298
- objBST.add([11, { name: '11', age: 11 }]);
1299
- objBST.add([3, { name: '3', age: 3 }]);
1298
+ objBST.set([11, { name: '11', age: 11 }]);
1299
+ objBST.set([3, { name: '3', age: 3 }]);
1300
1300
 
1301
- objBST.addMany(
1301
+ objBST.setMany(
1302
1302
  [15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5],
1303
1303
  [
1304
1304
  { name: 'Alice', age: 15 },
@@ -1374,10 +1374,10 @@ describe('BST operations not map mode test recursively', () => {
1374
1374
  isMapMode: false
1375
1375
  });
1376
1376
  expect(bst).toBeInstanceOf(BST);
1377
- bst.add([11, 11]);
1378
- bst.add([3, 3]);
1377
+ bst.set([11, 11]);
1378
+ bst.set([3, 3]);
1379
1379
  const idsAndValues = [15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];
1380
- bst.addMany(idsAndValues, undefined, false);
1380
+ bst.setMany(idsAndValues, undefined, false);
1381
1381
  expect(bst.root).toBeInstanceOf(BSTNode);
1382
1382
 
1383
1383
  if (bst.root) expect(bst.root.key).toBe(11);
@@ -1401,8 +1401,8 @@ describe('BST operations not map mode test recursively', () => {
1401
1401
  it('should perform various operations on a Binary Search Tree with object values', () => {
1402
1402
  const objBST = new BST<number, { key: number; keyA: number }>([], { isMapMode: false });
1403
1403
  expect(objBST).toBeInstanceOf(BST);
1404
- objBST.add([11, { key: 11, keyA: 11 }]);
1405
- objBST.add([3, { key: 3, keyA: 3 }]);
1404
+ objBST.set([11, { key: 11, keyA: 11 }]);
1405
+ objBST.set([3, { key: 3, keyA: 3 }]);
1406
1406
  const entries: [number, { key: number; keyA: number }][] = [
1407
1407
  [15, { key: 15, keyA: 15 }],
1408
1408
  [1, { key: 1, keyA: 1 }],
@@ -1420,7 +1420,7 @@ describe('BST operations not map mode test recursively', () => {
1420
1420
  [5, { key: 5, keyA: 5 }]
1421
1421
  ];
1422
1422
 
1423
- objBST.addMany(entries, undefined, false);
1423
+ objBST.setMany(entries, undefined, false);
1424
1424
 
1425
1425
  expect(objBST.root).toBeInstanceOf(BSTNode);
1426
1426
 
@@ -1457,7 +1457,7 @@ describe('BST iterative methods not map mode test', () => {
1457
1457
  let bst: BST<number, string>;
1458
1458
  beforeEach(() => {
1459
1459
  bst = new BST();
1460
- bst.addMany(
1460
+ bst.setMany(
1461
1461
  [
1462
1462
  [1, 'a'],
1463
1463
  [2, 'b'],
@@ -1476,7 +1476,7 @@ describe('BST iterative methods not map mode test', () => {
1476
1476
 
1477
1477
  it('should collapsed, unbalanced, balanced bst leaves', () => {
1478
1478
  const collapsedToLinkedList = new BST();
1479
- collapsedToLinkedList.addMany(
1479
+ collapsedToLinkedList.setMany(
1480
1480
  [
1481
1481
  [1, 'a'],
1482
1482
  [2, 'b'],
@@ -1495,7 +1495,7 @@ describe('BST iterative methods not map mode test', () => {
1495
1495
  expect(collapsedToLinkedList.leaves()).toEqual([9]);
1496
1496
 
1497
1497
  const unbalanced = new BST();
1498
- unbalanced.addMany(
1498
+ unbalanced.setMany(
1499
1499
  [
1500
1500
  [2, 'b'],
1501
1501
  [1, 'a'],
@@ -1514,7 +1514,7 @@ describe('BST iterative methods not map mode test', () => {
1514
1514
  expect(unbalanced.leaves()).toEqual([1, 9]);
1515
1515
 
1516
1516
  const balanced = new BST();
1517
- balanced.addMany(
1517
+ balanced.setMany(
1518
1518
  [
1519
1519
  [2, 'b'],
1520
1520
  [1, 'a'],
@@ -1540,8 +1540,8 @@ describe('BST constructor and comparator edge cases', () => {
1540
1540
  const bst = new BST<number>([], {
1541
1541
  comparator: (a, b) => b - a
1542
1542
  });
1543
- bst.add(1);
1544
- bst.add(2);
1543
+ bst.set(1);
1544
+ bst.set(2);
1545
1545
  expect([...bst.keys()]).toEqual([2, 1]);
1546
1546
  });
1547
1547
 
@@ -1556,7 +1556,7 @@ describe('BST addMany edge cases', () => {
1556
1556
  const bst = new BST<number, string>();
1557
1557
  const keys = [1, 2, 3];
1558
1558
  const values = ['a', 'b', 'c'];
1559
- const result = bst.addMany(keys, values);
1559
+ const result = bst.setMany(keys, values);
1560
1560
  expect(result).toEqual([true, true, true]);
1561
1561
  expect([...bst]).toEqual([
1562
1562
  [1, 'a'],
@@ -1567,7 +1567,7 @@ describe('BST addMany edge cases', () => {
1567
1567
 
1568
1568
  it('should addMany with isBalanceAdd=false', () => {
1569
1569
  const bst = new BST<number>();
1570
- const result = bst.addMany([3, 1, 2], undefined, false);
1570
+ const result = bst.setMany([3, 1, 2], undefined, false);
1571
1571
  expect(result).toEqual([true, true, true]);
1572
1572
  expect([...bst.keys()]).toEqual([1, 2, 3]);
1573
1573
  });
@@ -1575,7 +1575,7 @@ describe('BST addMany edge cases', () => {
1575
1575
  it('should addMany with raw/entry/node', () => {
1576
1576
  const bst = new BST<number, string>([], { isMapMode: false });
1577
1577
  const node = new BSTNode(5, 'x');
1578
- const result = bst.addMany([1, [2, 'b'], node]);
1578
+ const result = bst.setMany([1, [2, 'b'], node]);
1579
1579
  expect(result).toEqual([true, true, true]);
1580
1580
  expect(bst.get(5)).toBe('x');
1581
1581
  });
@@ -1586,10 +1586,10 @@ describe('BST perfectlyBalance and isAVLBalanced edge cases', () => {
1586
1586
  const bst = new BST<number>();
1587
1587
  expect(bst.perfectlyBalance('RECURSIVE')).toBe(false);
1588
1588
  expect(bst.perfectlyBalance('ITERATIVE')).toBe(false);
1589
- bst.addMany([1, 2, 3]);
1589
+ bst.setMany([1, 2, 3]);
1590
1590
  expect(bst.perfectlyBalance('RECURSIVE')).toBe(true);
1591
1591
  bst.clear();
1592
- bst.addMany([1, 2, 3]);
1592
+ bst.setMany([1, 2, 3]);
1593
1593
  expect(bst.perfectlyBalance('ITERATIVE')).toBe(true);
1594
1594
  });
1595
1595
 
@@ -1597,7 +1597,7 @@ describe('BST perfectlyBalance and isAVLBalanced edge cases', () => {
1597
1597
  const bst = new BST<number>();
1598
1598
  expect(bst.isAVLBalanced('RECURSIVE')).toBe(true);
1599
1599
  expect(bst.isAVLBalanced('ITERATIVE')).toBe(true);
1600
- bst.addMany([1, 2, 3, 4, 5]);
1600
+ bst.setMany([1, 2, 3, 4, 5]);
1601
1601
  expect(typeof bst.isAVLBalanced('RECURSIVE')).toBe('boolean');
1602
1602
  expect(typeof bst.isAVLBalanced('ITERATIVE')).toBe('boolean');
1603
1603
  });
@@ -1821,7 +1821,7 @@ describe('BST ceiling and higher', () => {
1821
1821
  // 6 9
1822
1822
  bst = new BST<number, string>();
1823
1823
  const keys = [10, 5, 15, 2, 8, 12, 20, 6, 9];
1824
- keys.forEach(k => bst.add(k, `val-${k}`));
1824
+ keys.forEach(k => bst.set(k, `val-${k}`));
1825
1825
  });
1826
1826
 
1827
1827
  describe('ceiling (First key >= key)', () => {
@@ -1898,7 +1898,7 @@ describe('BST ceiling and higher', () => {
1898
1898
 
1899
1899
  test('should handle single node tree', () => {
1900
1900
  const singleNodeTree = new BST<number, string>();
1901
- singleNodeTree.add(10);
1901
+ singleNodeTree.set(10);
1902
1902
 
1903
1903
  // ceiling
1904
1904
  expect(singleNodeTree.ceiling(5)).toBe(10);
@@ -1918,7 +1918,7 @@ describe('BST ceiling and higher', () => {
1918
1918
  const randomKeys = generateRandomArray(500, 0, 1000);
1919
1919
 
1920
1920
  // Insert unique keys
1921
- [...new Set(randomKeys)].forEach(k => fuzzTree.add(k));
1921
+ [...new Set(randomKeys)].forEach(k => fuzzTree.set(k));
1922
1922
 
1923
1923
  // Sort for verification (Ground Truth)
1924
1924
  const sortedKeys = Array.from(fuzzTree.keys()).sort((a, b) => a - b);
@@ -1972,7 +1972,7 @@ describe('BST ceiling and higher', () => {
1972
1972
  describe('single node tree', () => {
1973
1973
  beforeEach(() => {
1974
1974
  bst = new BST<number, string>();
1975
- bst.add(10, 'ten');
1975
+ bst.set(10, 'ten');
1976
1976
  });
1977
1977
 
1978
1978
  it('ceiling should return the key if key matches', () => {
@@ -2669,11 +2669,11 @@ describe('BST Comparator Tests', () => {
2669
2669
  });
2670
2670
 
2671
2671
  it('should correctly insert elements based on comparator', () => {
2672
- bst.add(10);
2673
- bst.add(5);
2674
- bst.add(15);
2675
- bst.add(3);
2676
- bst.add(7);
2672
+ bst.set(10);
2673
+ bst.set(5);
2674
+ bst.set(15);
2675
+ bst.set(3);
2676
+ bst.set(7);
2677
2677
 
2678
2678
  expect(bst.has(10)).toBe(true);
2679
2679
  expect(bst.has(5)).toBe(true);
@@ -2684,7 +2684,7 @@ describe('BST Comparator Tests', () => {
2684
2684
  });
2685
2685
 
2686
2686
  it('should maintain BST property with in-order traversal', () => {
2687
- bst.addMany([11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5]);
2687
+ bst.setMany([11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5]);
2688
2688
 
2689
2689
  const inOrder: (number | undefined)[] = bst.dfs(node => node?.key);
2690
2690
 
@@ -2694,7 +2694,7 @@ describe('BST Comparator Tests', () => {
2694
2694
  });
2695
2695
 
2696
2696
  it('should correctly find min and max using comparator', () => {
2697
- bst.addMany([15, 10, 20, 8, 12, 18, 25]);
2697
+ bst.setMany([15, 10, 20, 8, 12, 18, 25]);
2698
2698
 
2699
2699
  const arr = Array.from(bst.keys());
2700
2700
  const min = Math.min(...arr);
@@ -2705,7 +2705,7 @@ describe('BST Comparator Tests', () => {
2705
2705
  });
2706
2706
 
2707
2707
  it('should correctly delete elements maintaining BST property', () => {
2708
- bst.addMany([10, 5, 15, 3, 7, 12, 18]);
2708
+ bst.setMany([10, 5, 15, 3, 7, 12, 18]);
2709
2709
  bst.delete(10);
2710
2710
 
2711
2711
  expect(bst.has(10)).toBe(false);
@@ -2717,7 +2717,7 @@ describe('BST Comparator Tests', () => {
2717
2717
  });
2718
2718
 
2719
2719
  it('should correctly search using comparator', () => {
2720
- bst.addMany([20, 10, 30, 5, 15, 25, 35]);
2720
+ bst.setMany([20, 10, 30, 5, 15, 25, 35]);
2721
2721
 
2722
2722
  const result = bst.search(15);
2723
2723
  expect(result.length).toBeGreaterThan(0);
@@ -2797,7 +2797,7 @@ describe('BST Comparator Tests', () => {
2797
2797
 
2798
2798
  beforeEach(() => {
2799
2799
  bst = new BST<number>();
2800
- bst.addMany([10, 5, 15, 3, 7, 12, 18, 1, 4, 6, 8, 11, 13, 16, 20]);
2800
+ bst.setMany([10, 5, 15, 3, 7, 12, 18, 1, 4, 6, 8, 11, 13, 16, 20]);
2801
2801
  });
2802
2802
 
2803
2803
  it('should find ceiling using comparator', () => {
@@ -2894,7 +2894,7 @@ describe('BST Comparator Tests', () => {
2894
2894
  { name: 'David', grade: 95 }
2895
2895
  ];
2896
2896
 
2897
- students.forEach(s => bst.add(s));
2897
+ students.forEach(s => bst.set(s));
2898
2898
 
2899
2899
  expect(bst.size).toBe(4);
2900
2900
  expect(bst.has(students[0])).toBe(true);
@@ -2911,9 +2911,9 @@ describe('BST Comparator Tests', () => {
2911
2911
 
2912
2912
  const bst = new BST<number[]>([], { comparator });
2913
2913
 
2914
- bst.add([1, 2, 3]);
2915
- bst.add([2, 2, 2]);
2916
- bst.add([1, 1, 1]);
2914
+ bst.set([1, 2, 3]);
2915
+ bst.set([2, 2, 2]);
2916
+ bst.set([1, 1, 1]);
2917
2917
 
2918
2918
  expect(bst.size).toBeGreaterThan(0);
2919
2919
  });
@@ -2965,7 +2965,7 @@ describe('BST Comparator Tests', () => {
2965
2965
  { departmentId: 1, employeeId: 102 }
2966
2966
  ];
2967
2967
 
2968
- keys.forEach(k => bst.add(k));
2968
+ keys.forEach(k => bst.set(k));
2969
2969
 
2970
2970
  expect(bst.size).toBe(5);
2971
2971
  const inOrder = bst.dfs(node => node?.key);
@@ -2992,7 +2992,7 @@ describe('BST Comparator Tests', () => {
2992
2992
  { departmentId: 2, employeeId: 102 }
2993
2993
  ];
2994
2994
 
2995
- keys.forEach(k => bst.add(k));
2995
+ keys.forEach(k => bst.set(k));
2996
2996
 
2997
2997
  const searchKey = keys[1];
2998
2998
  const result = bst.search(searchKey);
@@ -3017,7 +3017,7 @@ describe('BST Comparator Tests', () => {
3017
3017
  { departmentId: 2, employeeId: 102 }
3018
3018
  ];
3019
3019
 
3020
- keys.forEach(k => bst.add(k));
3020
+ keys.forEach(k => bst.set(k));
3021
3021
 
3022
3022
  const keyToDelete = keys[1];
3023
3023
  const deleted = bst.delete(keyToDelete);
@@ -3043,7 +3043,7 @@ describe('BST Comparator Tests', () => {
3043
3043
  { departmentId: 2, employeeId: 102 }
3044
3044
  ];
3045
3045
 
3046
- keys.forEach(k => bst.add(k));
3046
+ keys.forEach(k => bst.set(k));
3047
3047
 
3048
3048
  const searchKey = { departmentId: 1, employeeId: 103 };
3049
3049
  const ceiling = bst.ceiling(searchKey);
@@ -3081,8 +3081,8 @@ describe('BST Comparator Tests', () => {
3081
3081
  const key2: PersonKey = { id: 2, country: 'Canada' };
3082
3082
  const value2: PersonValue = { name: 'Bob', email: 'bob@example.com', age: 25 };
3083
3083
 
3084
- bst.add([key1, value1]);
3085
- bst.add([key2, value2]);
3084
+ bst.set([key1, value1]);
3085
+ bst.set([key2, value2]);
3086
3086
 
3087
3087
  expect(bst.size).toBe(2);
3088
3088
  expect(bst.get(key1)).toEqual(value1);
@@ -3102,10 +3102,10 @@ describe('BST Comparator Tests', () => {
3102
3102
  const value1: PersonValue = { name: 'Alice', email: 'alice@example.com', age: 30 };
3103
3103
  const value2: PersonValue = { name: 'Alice Updated', email: 'alice.new@example.com', age: 31 };
3104
3104
 
3105
- bst.add([key, value1]);
3105
+ bst.set([key, value1]);
3106
3106
  expect(bst.get(key)).toEqual(value1);
3107
3107
 
3108
- bst.add([key, value2]);
3108
+ bst.set([key, value2]);
3109
3109
  expect(bst.size).toBe(1);
3110
3110
  expect(bst.get(key)).toEqual(value2);
3111
3111
  });
@@ -3134,7 +3134,7 @@ describe('BST Comparator Tests', () => {
3134
3134
  ]
3135
3135
  ];
3136
3136
 
3137
- entries.forEach(([key, value]) => bst.add([key, value]));
3137
+ entries.forEach(([key, value]) => bst.set([key, value]));
3138
3138
 
3139
3139
  expect(bst.size).toBe(3);
3140
3140
 
@@ -3162,8 +3162,8 @@ describe('BST Comparator Tests', () => {
3162
3162
  const key2: PersonKey = { id: 2, country: 'Canada' };
3163
3163
  const value2: PersonValue = { name: 'Bob', email: 'bob@example.com', age: 25 };
3164
3164
 
3165
- bst.add([key1, value1]);
3166
- bst.add([key2, value2]);
3165
+ bst.set([key1, value1]);
3166
+ bst.set([key2, value2]);
3167
3167
 
3168
3168
  bst.delete(key1);
3169
3169
 
@@ -3197,7 +3197,7 @@ describe('BST Comparator Tests', () => {
3197
3197
  ]
3198
3198
  ];
3199
3199
 
3200
- entries.forEach(([key, value]) => bst.add([key, value]));
3200
+ entries.forEach(([key, value]) => bst.set([key, value]));
3201
3201
 
3202
3202
  const searchKey: PersonKey = entries[1][0];
3203
3203
  const value = bst.get(searchKey);
@@ -3225,7 +3225,7 @@ describe('BST Comparator Tests', () => {
3225
3225
  ]
3226
3226
  ];
3227
3227
 
3228
- entries.forEach(([key, value]) => bst.add([key, value]));
3228
+ entries.forEach(([key, value]) => bst.set([key, value]));
3229
3229
 
3230
3230
  const mapped = bst.map((value, key) => [key, value?.name], { comparator, isMapMode: false });
3231
3231
 
@@ -3243,7 +3243,7 @@ describe('BST Comparator Tests', () => {
3243
3243
  const bst = new BST<number, string>([], { comparator, isMapMode: true });
3244
3244
 
3245
3245
  for (let i = 1; i <= 10; i++) {
3246
- bst.add([i, `value-${i}`]);
3246
+ bst.set([i, `value-${i}`]);
3247
3247
  }
3248
3248
 
3249
3249
  const result = bst.rangeSearch([3, 7]);
@@ -3287,7 +3287,7 @@ describe('BST Comparator Tests', () => {
3287
3287
  ]
3288
3288
  ];
3289
3289
 
3290
- tasks.forEach(([key, value]) => bst.add([key, value]));
3290
+ tasks.forEach(([key, value]) => bst.set([key, value]));
3291
3291
 
3292
3292
  expect(bst.size).toBe(4);
3293
3293
 
@@ -3319,8 +3319,8 @@ describe('classic use', () => {
3319
3319
  expect(bst.size).toBe(16);
3320
3320
 
3321
3321
  // Add new elements
3322
- bst.add(17);
3323
- bst.add(0);
3322
+ bst.set(17);
3323
+ bst.set(0);
3324
3324
  expect(bst.size).toBe(18);
3325
3325
 
3326
3326
  // Verify keys are searchable
@@ -3368,7 +3368,7 @@ describe('classic use', () => {
3368
3368
 
3369
3369
  // Merge datasets into a single BinarySearchTree
3370
3370
  const merged = new BST<number, string>(dataset1);
3371
- merged.addMany(dataset2);
3371
+ merged.setMany(dataset2);
3372
3372
  merged.merge(dataset3);
3373
3373
 
3374
3374
  // Verify merged dataset is in sorted order