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.
Files changed (72) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/CONTRIBUTING.md +47 -1
  3. package/README.md +19 -8
  4. package/README_CN.md +119 -275
  5. package/benchmark/report.html +1 -1
  6. package/benchmark/report.json +20 -324
  7. package/dist/cjs/index.cjs +109 -107
  8. package/dist/cjs/index.cjs.map +1 -1
  9. package/dist/cjs-legacy/index.cjs +109 -107
  10. package/dist/cjs-legacy/index.cjs.map +1 -1
  11. package/dist/esm/index.mjs +109 -107
  12. package/dist/esm/index.mjs.map +1 -1
  13. package/dist/esm-legacy/index.mjs +109 -107
  14. package/dist/esm-legacy/index.mjs.map +1 -1
  15. package/dist/leetcode/avl-tree-counter.mjs +2957 -0
  16. package/dist/leetcode/avl-tree-multi-map.mjs +2889 -0
  17. package/dist/leetcode/avl-tree.mjs +2720 -0
  18. package/dist/leetcode/binary-tree.mjs +1594 -0
  19. package/dist/leetcode/bst.mjs +2398 -0
  20. package/dist/leetcode/deque.mjs +683 -0
  21. package/dist/leetcode/directed-graph.mjs +1733 -0
  22. package/dist/leetcode/doubly-linked-list.mjs +709 -0
  23. package/dist/leetcode/hash-map.mjs +493 -0
  24. package/dist/leetcode/heap.mjs +542 -0
  25. package/dist/leetcode/max-heap.mjs +375 -0
  26. package/dist/leetcode/max-priority-queue.mjs +383 -0
  27. package/dist/leetcode/min-heap.mjs +363 -0
  28. package/dist/leetcode/min-priority-queue.mjs +371 -0
  29. package/dist/leetcode/priority-queue.mjs +363 -0
  30. package/dist/leetcode/queue.mjs +943 -0
  31. package/dist/leetcode/red-black-tree.mjs +2765 -0
  32. package/dist/leetcode/singly-linked-list.mjs +754 -0
  33. package/dist/leetcode/stack.mjs +217 -0
  34. package/dist/leetcode/tree-counter.mjs +3039 -0
  35. package/dist/leetcode/tree-multi-map.mjs +2913 -0
  36. package/dist/leetcode/trie.mjs +413 -0
  37. package/dist/leetcode/undirected-graph.mjs +1650 -0
  38. package/dist/types/data-structures/binary-tree/avl-tree-counter.d.ts +1 -1
  39. package/dist/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +2 -2
  40. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +10 -10
  41. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +22 -23
  42. package/dist/types/data-structures/binary-tree/bst.d.ts +11 -11
  43. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +1 -1
  44. package/dist/types/data-structures/binary-tree/tree-counter.d.ts +1 -1
  45. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +2 -2
  46. package/dist/umd/data-structure-typed.js +105 -103
  47. package/dist/umd/data-structure-typed.js.map +1 -1
  48. package/dist/umd/data-structure-typed.min.js +2 -2
  49. package/dist/umd/data-structure-typed.min.js.map +1 -1
  50. package/package.json +48 -171
  51. package/src/data-structures/binary-tree/avl-tree-counter.ts +6 -6
  52. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +13 -13
  53. package/src/data-structures/binary-tree/avl-tree.ts +15 -15
  54. package/src/data-structures/binary-tree/binary-tree.ts +53 -55
  55. package/src/data-structures/binary-tree/bst.ts +21 -22
  56. package/src/data-structures/binary-tree/red-black-tree.ts +3 -3
  57. package/src/data-structures/binary-tree/tree-counter.ts +4 -4
  58. package/src/data-structures/binary-tree/tree-multi-map.ts +13 -13
  59. package/test/performance/data-structures/binary-tree/red-black-tree.test.ts +1 -2
  60. package/test/unit/data-structures/binary-tree/avl-tree-counter.test.ts +30 -30
  61. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +46 -46
  62. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +43 -43
  63. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +151 -151
  64. package/test/unit/data-structures/binary-tree/bst.test.ts +99 -99
  65. package/test/unit/data-structures/binary-tree/overall.test.ts +20 -20
  66. package/test/unit/data-structures/binary-tree/red-black-tree.test.ts +141 -141
  67. package/test/unit/data-structures/binary-tree/tree-counter.test.ts +37 -37
  68. package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +145 -145
  69. package/tsup.config.js +50 -21
  70. package/tsup.leetcode.config.js +1 -1
  71. package/tsup.umd.config.js +29 -0
  72. package/tsup.node.config.js +0 -83
@@ -3,9 +3,9 @@ import { AVLTree, BST, RedBlackTree, TreeMultiMap } from '../../../../src';
3
3
  describe('Overall BinaryTree Test', () => {
4
4
  it('should perform various operations on BinaryTree', () => {
5
5
  const bst = new BST<number>();
6
- bst.add(11);
7
- bst.add(3);
8
- bst.addMany([15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5], undefined, false);
6
+ bst.set(11);
7
+ bst.set(3);
8
+ bst.setMany([15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5], undefined, false);
9
9
  expect(bst.size).toBe(16); // true
10
10
  bst.has(6); // true
11
11
  expect(bst.has(6)).toBe(true); // true
@@ -24,10 +24,10 @@ describe('Overall BinaryTree Test', () => {
24
24
  expect(bfsIDs[0]).toBe(11);
25
25
 
26
26
  const objBST = new BST<number, { key: number; keyA: number }>();
27
- objBST.add([11, { key: 11, keyA: 11 }]);
28
- objBST.add([3, { key: 3, keyA: 3 }]);
27
+ objBST.set([11, { key: 11, keyA: 11 }]);
28
+ objBST.set([3, { key: 3, keyA: 3 }]);
29
29
 
30
- objBST.addMany([
30
+ objBST.setMany([
31
31
  [15, { key: 15, keyA: 15 }],
32
32
  [1, { key: 1, keyA: 1 }],
33
33
  [8, { key: 8, keyA: 8 }],
@@ -47,7 +47,7 @@ describe('Overall BinaryTree Test', () => {
47
47
  objBST.delete(11);
48
48
 
49
49
  const avlTree = new AVLTree();
50
- avlTree.addMany([11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5]);
50
+ avlTree.setMany([11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5]);
51
51
  avlTree.isAVLBalanced(); // true
52
52
  expect(avlTree.isAVLBalanced()).toBe(true); // true
53
53
  avlTree.delete(10);
@@ -103,9 +103,9 @@ describe('Overall BinaryTree Test', () => {
103
103
  comparator: (a, b) => b - a
104
104
  });
105
105
  expect(avl.size).toBe(5);
106
- avl.add(2);
107
- avl.add(5);
108
- avl.add(4);
106
+ avl.set(2);
107
+ avl.set(5);
108
+ avl.set(4);
109
109
  expect(avl.root?.key).toBe(3);
110
110
  expect(avl.root?.left?.key).toBe(7);
111
111
  expect(avl.root?.left?.left?.key).toBe(9);
@@ -145,11 +145,11 @@ describe('Overall BinaryTree Test', () => {
145
145
  iterationType: 'RECURSIVE'
146
146
  });
147
147
  expect(tmm.size).toBe(5);
148
- tmm.add(2);
149
- tmm.add(2);
150
- tmm.add(2);
151
- tmm.add(5);
152
- tmm.add(4);
148
+ tmm.set(2);
149
+ tmm.set(2);
150
+ tmm.set(2);
151
+ tmm.set(5);
152
+ tmm.set(4);
153
153
  expect(tmm.root?.key).toBe(3);
154
154
  expect(tmm.root?.left?.key).toBe(1);
155
155
  expect(tmm.root?.left?.left?.key).toBe(NaN);
@@ -190,11 +190,11 @@ describe('Overall BinaryTree Test', () => {
190
190
  iterationType: 'RECURSIVE'
191
191
  });
192
192
  expect(rbTree.size).toBe(5);
193
- rbTree.add(2);
194
- rbTree.add(2);
195
- rbTree.add(2);
196
- rbTree.add(5);
197
- rbTree.add(4);
193
+ rbTree.set(2);
194
+ rbTree.set(2);
195
+ rbTree.set(2);
196
+ rbTree.set(5);
197
+ rbTree.set(4);
198
198
  expect(rbTree.root?.key).toBe(3);
199
199
  expect(rbTree.root?.left?.key).toBe(1);
200
200
  expect(rbTree.root?.left?.left?.key).toBe(NaN);
@@ -17,9 +17,9 @@ describe('RedBlackTree 1', () => {
17
17
 
18
18
  describe('add and getNode', () => {
19
19
  it('should add and find a node in the rbTree', () => {
20
- rbTree.add(10);
21
- rbTree.add(20);
22
- rbTree.add(5);
20
+ rbTree.set(10);
21
+ rbTree.set(20);
22
+ rbTree.set(5);
23
23
 
24
24
  expect(rbTree.getNode(10)).toBeInstanceOf(RedBlackTreeNode);
25
25
  expect(rbTree.getNode(20)).toBeInstanceOf(RedBlackTreeNode);
@@ -28,8 +28,8 @@ describe('RedBlackTree 1', () => {
28
28
  });
29
29
 
30
30
  it('should add and find nodes with negative keys', () => {
31
- rbTree.add(-10);
32
- rbTree.add(-20);
31
+ rbTree.set(-10);
32
+ rbTree.set(-20);
33
33
 
34
34
  expect(rbTree.getNode(-10)).toBeInstanceOf(RedBlackTreeNode);
35
35
  expect(rbTree.getNode(-20)).toBeInstanceOf(RedBlackTreeNode);
@@ -38,36 +38,36 @@ describe('RedBlackTree 1', () => {
38
38
 
39
39
  describe('deleteNode', () => {
40
40
  it('should delete a node from the rbTree', () => {
41
- rbTree.add(10);
42
- rbTree.add(20);
43
- rbTree.add(5);
41
+ rbTree.set(10);
42
+ rbTree.set(20);
43
+ rbTree.set(5);
44
44
  rbTree.delete(20);
45
45
 
46
46
  expect(rbTree.getNode(20)).toBe(undefined);
47
47
  });
48
48
 
49
49
  it('should handle deleting a non-existent node', () => {
50
- rbTree.add(10);
51
- rbTree.add(20);
52
- rbTree.add(5);
50
+ rbTree.set(10);
51
+ rbTree.set(20);
52
+ rbTree.set(5);
53
53
  rbTree.delete(15);
54
54
 
55
55
  expect(rbTree.getNode(15)).toBe(undefined);
56
56
  });
57
57
 
58
58
  it('should getNode performance O(log n)', () => {
59
- for (let i = 0; i < 10; i++) rbTree.add(i);
59
+ for (let i = 0; i < 10; i++) rbTree.set(i);
60
60
  rbTree.getNode(6);
61
61
  });
62
62
  });
63
63
 
64
64
  describe('minimum', () => {
65
65
  it('should find the minimum node in the rbTree', () => {
66
- rbTree.add(10);
67
- rbTree.add(20);
68
- rbTree.add(5);
69
- rbTree.add(15);
70
- rbTree.add(3);
66
+ rbTree.set(10);
67
+ rbTree.set(20);
68
+ rbTree.set(5);
69
+ rbTree.set(15);
70
+ rbTree.set(3);
71
71
 
72
72
  const minNode = rbTree.getLeftMost(node => node, rbTree.root);
73
73
  expect(minNode?.key).toBe(3);
@@ -81,11 +81,11 @@ describe('RedBlackTree 1', () => {
81
81
 
82
82
  describe('getRightMost', () => {
83
83
  it('should find the getRightMost node in the rbTree', () => {
84
- rbTree.add(10);
85
- rbTree.add(20);
86
- rbTree.add(5);
87
- rbTree.add(15);
88
- rbTree.add(25);
84
+ rbTree.set(10);
85
+ rbTree.set(20);
86
+ rbTree.set(5);
87
+ rbTree.set(15);
88
+ rbTree.set(25);
89
89
 
90
90
  const maxNode = rbTree.getRightMost(node => node, rbTree.root);
91
91
  expect(maxNode?.key).toBe(25);
@@ -99,11 +99,11 @@ describe('RedBlackTree 1', () => {
99
99
 
100
100
  describe('getSuccessor', () => {
101
101
  it('should find the getSuccessor of a node', () => {
102
- rbTree.add(10);
103
- rbTree.add(20);
104
- rbTree.add(5);
105
- rbTree.add(15);
106
- rbTree.add(25);
102
+ rbTree.set(10);
103
+ rbTree.set(20);
104
+ rbTree.set(5);
105
+ rbTree.set(15);
106
+ rbTree.set(25);
107
107
 
108
108
  const node = rbTree.getNode(15);
109
109
  const successorNode = rbTree.getSuccessor(node!);
@@ -112,8 +112,8 @@ describe('RedBlackTree 1', () => {
112
112
  });
113
113
 
114
114
  it('should handle a node with no getSuccessor', () => {
115
- rbTree.add(10);
116
- rbTree.add(5);
115
+ rbTree.set(10);
116
+ rbTree.set(5);
117
117
 
118
118
  const node = rbTree.getNode(10);
119
119
  const successorNode = rbTree.getSuccessor(node!);
@@ -124,11 +124,11 @@ describe('RedBlackTree 1', () => {
124
124
 
125
125
  describe('getPredecessor', () => {
126
126
  it('should find the getPredecessor of a node', () => {
127
- rbTree.add(10);
128
- rbTree.add(20);
129
- rbTree.add(5);
130
- rbTree.add(15);
131
- rbTree.add(25);
127
+ rbTree.set(10);
128
+ rbTree.set(20);
129
+ rbTree.set(5);
130
+ rbTree.set(15);
131
+ rbTree.set(25);
132
132
 
133
133
  const node = rbTree.getNode(20);
134
134
  const predecessorNode = rbTree.getPredecessor(node!);
@@ -137,8 +137,8 @@ describe('RedBlackTree 1', () => {
137
137
  });
138
138
 
139
139
  it('should handle a node with no getPredecessor', () => {
140
- rbTree.add(10);
141
- rbTree.add(20);
140
+ rbTree.set(10);
141
+ rbTree.set(20);
142
142
 
143
143
  const node = rbTree.getNode(20);
144
144
  const predecessorNode = rbTree.getPredecessor(node!);
@@ -160,7 +160,7 @@ describe('RedBlackTree 1', () => {
160
160
  }
161
161
 
162
162
  const rbTree = new RedBlackTree<string, number>();
163
- rbTree.addMany([
163
+ rbTree.setMany([
164
164
  ['2', 2],
165
165
  ['4', 4],
166
166
  ['5', 5],
@@ -188,17 +188,17 @@ describe('RedBlackTree 1', () => {
188
188
  const rbTree = new RedBlackTree<number, string>([4, 5, [1, '1'], 2, 3], { isMapMode: false });
189
189
  expect(rbTree.get(1)).toBe('1');
190
190
  expect(rbTree.getNode(1)?.value).toBe('1');
191
- rbTree.add(1, 'a');
191
+ rbTree.set(1, 'a');
192
192
  expect(rbTree.get(1)).toBe('a');
193
- rbTree.add([1, 'b']);
193
+ rbTree.set([1, 'b']);
194
194
  expect(rbTree.getNode(1)?.value).toBe('b');
195
195
  expect(rbTree.get(1)).toBe('b');
196
196
  const treeMap = new RedBlackTree<number>([4, 5, [1, '1'], 2, 3]);
197
197
  expect(treeMap.get(1)).toBe('1');
198
198
  expect(treeMap.getNode(1)?.value).toBe(undefined);
199
- treeMap.add(1, 'a');
199
+ treeMap.set(1, 'a');
200
200
  expect(treeMap.get(1)).toBe('a');
201
- treeMap.add([1, 'b']);
201
+ treeMap.set([1, 'b']);
202
202
  expect(treeMap.getNode(1)?.value).toBe(undefined);
203
203
  expect(treeMap.get(1)).toBe('b');
204
204
  });
@@ -212,68 +212,68 @@ describe('RedBlackTree 2', () => {
212
212
  });
213
213
 
214
214
  it('should add nodes into the rbTree', () => {
215
- rbTree.add(10);
215
+ rbTree.set(10);
216
216
  expect(rbTree.getNode(10)).toBeDefined();
217
- rbTree.add(20);
217
+ rbTree.set(20);
218
218
  expect(rbTree.getNode(20)).toBeDefined();
219
- rbTree.add(5);
219
+ rbTree.set(5);
220
220
  expect(rbTree.getNode(5)).toBeDefined();
221
221
  });
222
222
 
223
223
  it('should delete nodes from the rbTree', () => {
224
- rbTree.add(10);
225
- rbTree.add(20);
226
- rbTree.add(5);
224
+ rbTree.set(10);
225
+ rbTree.set(20);
226
+ rbTree.set(5);
227
227
  rbTree.delete(20);
228
228
  expect(rbTree.getNode(20)).toBe(undefined);
229
229
  });
230
230
 
231
231
  it('should get the successor of a node', () => {
232
- rbTree.add(10);
233
- rbTree.add(20);
232
+ rbTree.set(10);
233
+ rbTree.set(20);
234
234
  const node = rbTree.getNode(10);
235
235
  const successor = rbTree.getSuccessor(node!);
236
236
  expect(successor?.key).toBe(20);
237
237
  });
238
238
 
239
239
  it('should get the predecessor of a node', () => {
240
- rbTree.add(10);
241
- rbTree.add(20);
240
+ rbTree.set(10);
241
+ rbTree.set(20);
242
242
  const node = rbTree.getNode(20);
243
243
  const predecessor = rbTree.getPredecessor(node!);
244
244
  expect(predecessor?.key).toBe(20);
245
245
  });
246
246
 
247
247
  it('should rotate nodes to the left', () => {
248
- rbTree.add(10);
249
- rbTree.add(20);
250
- rbTree.add(5);
248
+ rbTree.set(10);
249
+ rbTree.set(20);
250
+ rbTree.set(5);
251
251
  const node = rbTree.getNode(10);
252
- rbTree.add(15);
252
+ rbTree.set(15);
253
253
  // Verify that rotation has occurred
254
254
  expect(node?.left?.key).toBe(5);
255
255
  expect(node?.right?.key).toBe(20);
256
256
  });
257
257
 
258
258
  it('should rotate nodes to the right', () => {
259
- rbTree.add(10);
260
- rbTree.add(20);
261
- rbTree.add(5);
259
+ rbTree.set(10);
260
+ rbTree.set(20);
261
+ rbTree.set(5);
262
262
  const node = rbTree.getNode(20);
263
- rbTree.add(25);
263
+ rbTree.set(25);
264
264
  // Verify that rotation has occurred
265
265
  expect(node?.left?.key).toBeNaN();
266
266
  expect(node?.right?.key).toBe(25);
267
267
  });
268
268
 
269
269
  it('should all node attributes fully conform to the red-black rbTree standards.', () => {
270
- rbTree.add(10);
271
- rbTree.add(20);
272
- rbTree.add(5);
273
- rbTree.add(15);
274
- rbTree.add(21);
275
- rbTree.add(6);
276
- rbTree.add(2);
270
+ rbTree.set(10);
271
+ rbTree.set(20);
272
+ rbTree.set(5);
273
+ rbTree.set(15);
274
+ rbTree.set(21);
275
+ rbTree.set(6);
276
+ rbTree.set(2);
277
277
 
278
278
  let node10F = rbTree.getNode(10);
279
279
  let node20F = rbTree.getNode(20);
@@ -409,31 +409,31 @@ describe('RedBlackTree 2', () => {
409
409
  });
410
410
 
411
411
  it('should fix the rbTree after insertion', () => {
412
- rbTree.add(1);
413
- rbTree.add(2);
414
- rbTree.add(5);
415
- rbTree.add(15);
412
+ rbTree.set(1);
413
+ rbTree.set(2);
414
+ rbTree.set(5);
415
+ rbTree.set(15);
416
416
  const node15F = rbTree.getNode(15);
417
417
  expect(node15F?.left).toBe(rbTree.NIL);
418
418
  expect(node15F?.right).toBe(rbTree.NIL);
419
419
  expect(node15F?.parent).toBe(rbTree.getNode(5));
420
420
 
421
- rbTree.add(25);
422
- rbTree.add(10);
423
- rbTree.add(8);
424
- rbTree.add(28);
425
- rbTree.add(111);
426
- rbTree.add(12);
421
+ rbTree.set(25);
422
+ rbTree.set(10);
423
+ rbTree.set(8);
424
+ rbTree.set(28);
425
+ rbTree.set(111);
426
+ rbTree.set(12);
427
427
  rbTree.delete(2);
428
- rbTree.add(22);
429
- rbTree.add(50);
430
- rbTree.add(155);
431
- rbTree.add(225);
428
+ rbTree.set(22);
429
+ rbTree.set(50);
430
+ rbTree.set(155);
431
+ rbTree.set(225);
432
432
  const node225F = rbTree.getNode(225);
433
433
  expect(node225F?.left).toBe(rbTree.NIL);
434
434
  expect(node225F?.right).toBe(rbTree.NIL);
435
435
  expect(node225F?.parent?.key).toBe(155);
436
- rbTree.add(7);
436
+ rbTree.set(7);
437
437
  if (isDebug) rbTree.print();
438
438
 
439
439
  const node15S = rbTree.getNode(15);
@@ -448,9 +448,9 @@ describe('RedBlackTree 2', () => {
448
448
  const node15T = rbTree.getNode(15);
449
449
  expect(node15T).toBe(undefined);
450
450
 
451
- rbTree.add(23);
452
- rbTree.add(33);
453
- rbTree.add(15);
451
+ rbTree.set(23);
452
+ rbTree.set(33);
453
+ rbTree.set(15);
454
454
 
455
455
  const nodeLM = rbTree.getLeftMost();
456
456
  expect(nodeLM).toBe(1);
@@ -469,19 +469,19 @@ describe('RedBlackTree 2', () => {
469
469
  expect(node225S?.parent?.key).toBe(155);
470
470
  // TODO
471
471
  // expect(rbTree.getNode(0)).toBe(undefined);
472
- rbTree.add(2);
473
- rbTree.add(3);
474
- rbTree.add(4);
475
- rbTree.add(6);
476
- rbTree.add(9);
477
- rbTree.add(11);
478
- rbTree.add(13);
479
- rbTree.add(14);
480
- rbTree.add(16);
481
- rbTree.add(17);
482
- rbTree.add(18);
483
- rbTree.add(19);
484
- rbTree.add(110);
472
+ rbTree.set(2);
473
+ rbTree.set(3);
474
+ rbTree.set(4);
475
+ rbTree.set(6);
476
+ rbTree.set(9);
477
+ rbTree.set(11);
478
+ rbTree.set(13);
479
+ rbTree.set(14);
480
+ rbTree.set(16);
481
+ rbTree.set(17);
482
+ rbTree.set(18);
483
+ rbTree.set(19);
484
+ rbTree.set(110);
485
485
 
486
486
  if (isDebug) rbTree.print();
487
487
 
@@ -494,7 +494,7 @@ describe('RedBlackTree 2', () => {
494
494
 
495
495
  it('should fix the rbTree after insertion and deletion', () => {
496
496
  for (let i = 0; i < 100; i++) {
497
- rbTree.add(i);
497
+ rbTree.set(i);
498
498
  }
499
499
  for (let i = 0; i < 49; i++) {
500
500
  rbTree.delete(i);
@@ -516,7 +516,7 @@ describe('RedBlackTree 2', () => {
516
516
 
517
517
  it('should fix the rbTree after large scale insertion and deletion', () => {
518
518
  for (let i = 0; i < 10000; i++) {
519
- rbTree.add(i);
519
+ rbTree.set(i);
520
520
  }
521
521
  for (let i = 0; i < 10000; i++) {
522
522
  rbTree.delete(i);
@@ -528,7 +528,7 @@ describe('RedBlackTree 2', () => {
528
528
 
529
529
  rbTree.clear();
530
530
  for (let i = 0; i < 1000; i++) {
531
- rbTree.add(getRandomInt(-100, 1000));
531
+ rbTree.set(getRandomInt(-100, 1000));
532
532
  rbTree.delete(getRandomInt(-100, 1000));
533
533
  }
534
534
 
@@ -543,7 +543,7 @@ describe('RedBlackTree 2', () => {
543
543
  rbTree.clear();
544
544
  const tS = performance.now();
545
545
  for (let i = 0; i < arr.length; i++) {
546
- rbTree.add(arr[i]);
546
+ rbTree.set(arr[i]);
547
547
  }
548
548
  if (isDebug) console.log(performance.now() - tS);
549
549
 
@@ -556,19 +556,19 @@ describe('RedBlackTree 2', () => {
556
556
  });
557
557
 
558
558
  it('duplicates', () => {
559
- rbTree.addMany([9, 8, 7, 8, 8, 8, 2, 3, 6, 5, 5, 4]);
559
+ rbTree.setMany([9, 8, 7, 8, 8, 8, 2, 3, 6, 5, 5, 4]);
560
560
  if (isDebug) rbTree.print();
561
561
 
562
562
  expect(rbTree.size).toBe(8);
563
563
  expect(rbTree.isBST()).toBe(true);
564
564
  expect(rbTree.isAVLBalanced()).toBe(true);
565
- rbTree.addMany([10, 5, 2, 11]);
565
+ rbTree.setMany([10, 5, 2, 11]);
566
566
  expect(rbTree.size).toBe(10);
567
567
  expect(rbTree.isBST()).toBe(true);
568
568
  expect(rbTree.isAVLBalanced()).toBe(true);
569
569
 
570
570
  rbTree.clear();
571
- rbTree.addMany([10, 20, 30, 40, 50, 60]);
571
+ rbTree.setMany([10, 20, 30, 40, 50, 60]);
572
572
  expect(rbTree.isAVLBalanced()).toBe(false);
573
573
  });
574
574
 
@@ -581,7 +581,7 @@ describe('RedBlackTree 2', () => {
581
581
  });
582
582
  it('The structure remains normal after random deletion', function () {
583
583
  for (let i = 0; i < inputSize; i++) {
584
- rbTree.add(i);
584
+ rbTree.set(i);
585
585
  }
586
586
 
587
587
  for (let i = 0; i < inputSize; i++) {
@@ -607,7 +607,7 @@ describe('RedBlackTree 2', () => {
607
607
  for (let i = 0; i < inputSize; i++) {
608
608
  const num = getRandomInt(0, inputSize - 1);
609
609
  if (i === 0 && isDebug) console.log(`first:`, num);
610
- rbTree.add(num);
610
+ rbTree.set(num);
611
611
  }
612
612
 
613
613
  for (let i = 0; i < inputSize; i++) {
@@ -634,9 +634,9 @@ describe('RedBlackTree 2', () => {
634
634
  let rbTree: RedBlackTree<number, string>;
635
635
  beforeEach(() => {
636
636
  rbTree = new RedBlackTree();
637
- rbTree.add([1, 'a']);
638
- rbTree.add(2, 'b');
639
- rbTree.add([3, 'c']);
637
+ rbTree.set([1, 'a']);
638
+ rbTree.set(2, 'b');
639
+ rbTree.set([3, 'c']);
640
640
  });
641
641
 
642
642
  it('The node obtained by get Node should match the node type', () => {
@@ -706,59 +706,59 @@ describe('RedBlackTree - _deleteFixup', () => {
706
706
  });
707
707
 
708
708
  it('should handle deleting a red leaf node', () => {
709
- rbTree.add(10, 10);
710
- rbTree.add(5, 5); // Red leaf
711
- rbTree.add(20, 20);
709
+ rbTree.set(10, 10);
710
+ rbTree.set(5, 5); // Red leaf
711
+ rbTree.set(20, 20);
712
712
 
713
713
  expect(rbTree.delete(5)).toHaveLength(1); // Delete red leaf
714
714
  expect(rbTree.root?.left).toBe(rbTree.NIL); // Left child should be NIL
715
715
  });
716
716
 
717
717
  it('should handle deleting a black leaf node', () => {
718
- rbTree.add(10, 10);
719
- rbTree.add(5, 5); // Black node
720
- rbTree.add(20, 20);
721
- rbTree.add(1, 1); // Black leaf node
718
+ rbTree.set(10, 10);
719
+ rbTree.set(5, 5); // Black node
720
+ rbTree.set(20, 20);
721
+ rbTree.set(1, 1); // Black leaf node
722
722
 
723
723
  expect(rbTree.delete(1)).toHaveLength(1); // Delete black leaf
724
724
  expect(rbTree.root?.left?.left).toBe(rbTree.NIL);
725
725
  });
726
726
 
727
727
  it('should handle deleting black node with red sibling', () => {
728
- rbTree.add(10, 10);
729
- rbTree.add(5, 5); // Black node
730
- rbTree.add(20, 20); // Red sibling
731
- rbTree.add(25, 25); // Force the sibling to be red
728
+ rbTree.set(10, 10);
729
+ rbTree.set(5, 5); // Black node
730
+ rbTree.set(20, 20); // Red sibling
731
+ rbTree.set(25, 25); // Force the sibling to be red
732
732
 
733
733
  expect(rbTree.delete(5)).toHaveLength(1); // Delete black node
734
734
  expect(rbTree.root?.right?.color).toBe('BLACK'); // Ensure sibling color is black after fixup
735
735
  });
736
736
 
737
737
  it('should handle deleting black node with black sibling', () => {
738
- rbTree.add(10, 10);
739
- rbTree.add(5, 5); // Black node
740
- rbTree.add(20, 20); // Black sibling
738
+ rbTree.set(10, 10);
739
+ rbTree.set(5, 5); // Black node
740
+ rbTree.set(20, 20); // Black sibling
741
741
 
742
742
  expect(rbTree.delete(5)).toHaveLength(1); // Delete black node
743
743
  expect(rbTree.root?.left).toBe(rbTree.NIL);
744
744
  });
745
745
 
746
746
  it('should handle deleting the root node', () => {
747
- rbTree.add(10, 10); // Root node
748
- rbTree.add(5, 5);
749
- rbTree.add(20, 20);
747
+ rbTree.set(10, 10); // Root node
748
+ rbTree.set(5, 5);
749
+ rbTree.set(20, 20);
750
750
 
751
751
  expect(rbTree.delete(10)).toHaveLength(1); // Delete root node
752
752
  expect(rbTree.root?.key).toBe(20); // New root should be 20
753
753
  });
754
754
 
755
755
  it('should handle complex case with multiple rotations', () => {
756
- rbTree.add(10, 10);
757
- rbTree.add(5, 5);
758
- rbTree.add(15, 15);
759
- rbTree.add(12, 12);
760
- rbTree.add(18, 18);
761
- rbTree.add(16, 16);
756
+ rbTree.set(10, 10);
757
+ rbTree.set(5, 5);
758
+ rbTree.set(15, 15);
759
+ rbTree.set(12, 12);
760
+ rbTree.set(18, 18);
761
+ rbTree.set(16, 16);
762
762
 
763
763
  // Delete a node that will cause rotations and color changes
764
764
  expect(rbTree.delete(5)).toHaveLength(1);
@@ -773,15 +773,15 @@ describe('RedBlackTree - _deleteFixup', () => {
773
773
  const rbTree = new RedBlackTree<number, number>();
774
774
 
775
775
  // Build a rbTree that will require complex fixup
776
- rbTree.add(20, 20);
777
- rbTree.add(10, 10);
778
- rbTree.add(30, 30);
779
- rbTree.add(5, 5);
780
- rbTree.add(15, 15);
781
- rbTree.add(25, 25);
782
- rbTree.add(35, 35);
783
- rbTree.add(2, 2);
784
- rbTree.add(8, 8);
776
+ rbTree.set(20, 20);
777
+ rbTree.set(10, 10);
778
+ rbTree.set(30, 30);
779
+ rbTree.set(5, 5);
780
+ rbTree.set(15, 15);
781
+ rbTree.set(25, 25);
782
+ rbTree.set(35, 35);
783
+ rbTree.set(2, 2);
784
+ rbTree.set(8, 8);
785
785
 
786
786
  // This deletion should trigger a complex fixup
787
787
  rbTree.delete(2);