data-structure-typed 1.50.6 → 1.50.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 (57) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +27 -24
  3. package/benchmark/report.html +1 -37
  4. package/benchmark/report.json +17 -395
  5. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +2 -2
  6. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +6 -4
  7. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  8. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  9. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +3 -3
  10. package/dist/cjs/data-structures/binary-tree/binary-tree.js +36 -33
  11. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  12. package/dist/cjs/data-structures/binary-tree/bst.d.ts +7 -5
  13. package/dist/cjs/data-structures/binary-tree/bst.js +68 -47
  14. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  15. package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +2 -8
  16. package/dist/cjs/data-structures/binary-tree/rb-tree.js +7 -17
  17. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
  18. package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +1 -2
  19. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +1 -1
  20. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  21. package/dist/cjs/types/common.d.ts +5 -22
  22. package/dist/cjs/types/common.js +0 -33
  23. package/dist/cjs/types/common.js.map +1 -1
  24. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +2 -2
  25. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js +6 -4
  26. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +3 -3
  27. package/dist/mjs/data-structures/binary-tree/binary-tree.js +36 -33
  28. package/dist/mjs/data-structures/binary-tree/bst.d.ts +7 -5
  29. package/dist/mjs/data-structures/binary-tree/bst.js +68 -47
  30. package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +2 -8
  31. package/dist/mjs/data-structures/binary-tree/rb-tree.js +7 -17
  32. package/dist/mjs/data-structures/binary-tree/tree-multi-map.d.ts +1 -2
  33. package/dist/mjs/data-structures/binary-tree/tree-multi-map.js +2 -2
  34. package/dist/mjs/types/common.d.ts +5 -22
  35. package/dist/mjs/types/common.js +1 -32
  36. package/dist/umd/data-structure-typed.js +112 -138
  37. package/dist/umd/data-structure-typed.min.js +2 -2
  38. package/dist/umd/data-structure-typed.min.js.map +1 -1
  39. package/package.json +6 -6
  40. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +8 -5
  41. package/src/data-structures/binary-tree/avl-tree.ts +1 -1
  42. package/src/data-structures/binary-tree/binary-tree.ts +35 -36
  43. package/src/data-structures/binary-tree/bst.ts +67 -44
  44. package/src/data-structures/binary-tree/rb-tree.ts +11 -22
  45. package/src/data-structures/binary-tree/tree-multi-map.ts +2 -2
  46. package/src/types/common.ts +6 -23
  47. package/test/integration/all-in-one.test.ts +2 -2
  48. package/test/integration/avl-tree.test.ts +1 -1
  49. package/test/integration/bst.test.ts +2 -2
  50. package/test/performance/data-structures/binary-tree/rb-tree.test.ts +13 -22
  51. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +12 -17
  52. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +4 -4
  53. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +118 -65
  54. package/test/unit/data-structures/binary-tree/bst.test.ts +12 -12
  55. package/test/unit/data-structures/binary-tree/overall.test.ts +7 -7
  56. package/test/unit/data-structures/binary-tree/rb-tree.test.ts +272 -267
  57. package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +249 -245
@@ -7,7 +7,7 @@ import type {
7
7
  RedBlackTreeNested,
8
8
  RedBlackTreeNodeNested
9
9
  } from '../../types';
10
- import { RBTNColor } from '../../types';
10
+ import { CRUD, RBTNColor } from '../../types';
11
11
  import { BST, BSTNode } from './bst';
12
12
  import { IBinaryTree } from '../../interfaces';
13
13
 
@@ -89,26 +89,16 @@ export class RedBlackTree<
89
89
  return this._SENTINEL;
90
90
  }
91
91
 
92
- protected _root: NODE | undefined;
92
+ protected override _root: NODE | undefined;
93
93
 
94
94
  /**
95
95
  * The function returns the root node of a tree or undefined if there is no root.
96
96
  * @returns The root node of the tree structure, or undefined if there is no root node.
97
97
  */
98
- get root(): NODE | undefined {
98
+ override get root(): NODE | undefined {
99
99
  return this._root;
100
100
  }
101
101
 
102
- protected _size: number = 0;
103
-
104
- /**
105
- * The function returns the size of an object.
106
- * @returns The size of the object, which is a number.
107
- */
108
- get size(): number {
109
- return this._size;
110
- }
111
-
112
102
  /**
113
103
  * The function creates a new Red-Black Tree node with the specified key, value, and color.
114
104
  * @param {K} key - The key parameter represents the key of the node being created. It is of type K,
@@ -208,7 +198,7 @@ export class RedBlackTree<
208
198
  * @returns a boolean value.
209
199
  */
210
200
  override isRealNode(node: NODE | undefined): node is NODE {
211
- if (node === this._SENTINEL || node === undefined) return false;
201
+ if (node === this.SENTINEL || node === undefined) return false;
212
202
  return node instanceof RedBlackTreeNode;
213
203
  }
214
204
 
@@ -244,8 +234,7 @@ export class RedBlackTree<
244
234
  beginRoot: BSTNKeyOrNode<K, NODE> = this.root,
245
235
  iterationType = this.iterationType
246
236
  ): NODE | null | undefined {
247
- if ((identifier as any) instanceof RedBlackTreeNode) callback = (node => node) as C;
248
- beginRoot = this.ensureNode(beginRoot);
237
+ // if ((identifier as any) instanceof RedBlackTreeNode) callback = (node => node) as C;
249
238
  return this.getNodes(identifier, callback, true, beginRoot, iterationType)[0] ?? undefined;
250
239
  }
251
240
 
@@ -262,8 +251,8 @@ export class RedBlackTree<
262
251
  * size counter to zero.
263
252
  */
264
253
  override clear() {
254
+ super.clear();
265
255
  this._root = this.SENTINEL;
266
- this._size = 0;
267
256
  }
268
257
 
269
258
  /**
@@ -290,7 +279,7 @@ export class RedBlackTree<
290
279
 
291
280
  const insertStatus = this._insert(newNode);
292
281
 
293
- if (insertStatus === 'inserted') {
282
+ if (insertStatus === 'CREATED') {
294
283
  // Ensure the root is black
295
284
  if (this.isRealNode(this._root)) {
296
285
  this._root.color = RBTNColor.BLACK;
@@ -299,7 +288,7 @@ export class RedBlackTree<
299
288
  }
300
289
  this._size++;
301
290
  return true;
302
- } else return insertStatus === 'updated';
291
+ } else return insertStatus === 'UPDATED';
303
292
  }
304
293
 
305
294
  /**
@@ -434,7 +423,7 @@ export class RedBlackTree<
434
423
  * node in the tree.
435
424
  * @returns {'inserted' | 'updated'} - The result of the insertion.
436
425
  */
437
- protected _insert(node: NODE): 'inserted' | 'updated' {
426
+ protected _insert(node: NODE): CRUD {
438
427
  let current = this.root;
439
428
  let parent: NODE | undefined = undefined;
440
429
 
@@ -446,7 +435,7 @@ export class RedBlackTree<
446
435
  current = current.right ?? this.SENTINEL;
447
436
  } else {
448
437
  this._replaceNode(current, node);
449
- return 'updated';
438
+ return 'UPDATED';
450
439
  }
451
440
  }
452
441
 
@@ -465,7 +454,7 @@ export class RedBlackTree<
465
454
  node.color = RBTNColor.RED;
466
455
 
467
456
  this._insertFixup(node);
468
- return 'inserted';
457
+ return 'CREATED';
469
458
  }
470
459
 
471
460
  /**
@@ -14,7 +14,7 @@ import type {
14
14
  TreeMultiMapNodeNested,
15
15
  TreeMultiMapOptions
16
16
  } from '../../types';
17
- import { IterationType, RBTNColor } from '../../types';
17
+ import { RBTNColor } from '../../types';
18
18
  import { IBinaryTree } from '../../interfaces';
19
19
  import { RedBlackTree, RedBlackTreeNode } from './rb-tree';
20
20
 
@@ -363,7 +363,7 @@ export class TreeMultiMap<
363
363
 
364
364
  this.clear();
365
365
 
366
- if (iterationType === IterationType.RECURSIVE) {
366
+ if (iterationType === 'RECURSIVE') {
367
367
  const buildBalanceBST = (l: number, r: number) => {
368
368
  if (l > r) return;
369
369
  const m = l + Math.floor((r - l) / 2);
@@ -1,13 +1,5 @@
1
- export enum BSTVariant {
2
- STANDARD = 'STANDARD',
3
- INVERSE = 'INVERSE'
4
- }
5
-
6
- export enum CP {
7
- lt = 'lt',
8
- eq = 'eq',
9
- gt = 'gt'
10
- }
1
+ export type BSTVariant = 'STANDARD' | 'INVERSE';
2
+ export type CP = 'LT' | 'EQ' | 'GT';
11
3
 
12
4
  /**
13
5
  * Enum representing different loop types.
@@ -15,20 +7,9 @@ export enum CP {
15
7
  * - `iterative`: Indicates the iterative loop type (with loops that use iterations).
16
8
  * - `recursive`: Indicates the recursive loop type (with loops that call themselves).
17
9
  */
18
- export enum IterationType {
19
- ITERATIVE = 'ITERATIVE',
20
- RECURSIVE = 'RECURSIVE'
21
- }
10
+ export type IterationType = 'ITERATIVE' | 'RECURSIVE';
22
11
 
23
- export enum FamilyPosition {
24
- ROOT = 'ROOT',
25
- LEFT = 'LEFT',
26
- RIGHT = 'RIGHT',
27
- ROOT_LEFT = 'ROOT_LEFT',
28
- ROOT_RIGHT = 'ROOT_RIGHT',
29
- ISOLATED = 'ISOLATED',
30
- MAL_NODE = 'MAL_NODE'
31
- }
12
+ export type FamilyPosition = 'ROOT' | 'LEFT' | 'RIGHT' | 'ROOT_LEFT' | 'ROOT_RIGHT' | 'ISOLATED' | 'MAL_NODE';
32
13
 
33
14
  export type Comparator<K> = (a: K, b: K) => number;
34
15
 
@@ -63,3 +44,5 @@ export type BTNodePureExemplar<K, V, N> = [K, V | undefined] | BTNodePureKeyOrNo
63
44
  export type BSTNKeyOrNode<K, N> = K | undefined | N;
64
45
 
65
46
  export type BinaryTreeDeleteResult<N> = { deleted: N | null | undefined; needBalanced: N | null | undefined };
47
+
48
+ export type CRUD = 'CREATED' | 'READ' | 'UPDATED' | 'DELETED';
@@ -1,4 +1,4 @@
1
- import { AVLTree, CP } from 'data-structure-typed';
1
+ import { AVLTree } from 'data-structure-typed';
2
2
 
3
3
  describe('AVL Tree Test from data-structure-typed', () => {
4
4
  it('should perform various operations on a AVL Tree from data-structure-typed', () => {
@@ -27,7 +27,7 @@ describe('AVL Tree Test from data-structure-typed', () => {
27
27
  expect(subTreeSum).toBe(70);
28
28
 
29
29
  let lesserSum = 0;
30
- tree.lesserOrGreaterTraverse(node => (lesserSum += node.key), CP.lt, 10);
30
+ tree.lesserOrGreaterTraverse(node => (lesserSum += node.key), 'LT', 10);
31
31
  expect(lesserSum).toBe(45);
32
32
 
33
33
  // node15 has type problem. After the uniform design, the generics of containers (DirectedGraph, BST) are based on the type of value. However, this design has a drawback: when I attempt to inherit from the Vertex or BSTNode classes, the types of the results obtained by all methods are those of the parent class.
@@ -40,7 +40,7 @@ describe('AVL Tree Test', () => {
40
40
  expect(getMinNodeBySpecificNode?.key).toBe(12);
41
41
 
42
42
  let subTreeSum = 0;
43
- node15 && tree.subTreeTraverse(node => (subTreeSum += node.key), 15);
43
+ node15 && tree.dfs(node => (subTreeSum += node.key), 'in', 15);
44
44
  expect(subTreeSum).toBe(70);
45
45
 
46
46
  let lesserSum = 0;
@@ -34,7 +34,7 @@ describe('Individual package BST operations test', () => {
34
34
  expect(minNodeBySpecificNode?.key).toBe(12);
35
35
 
36
36
  let subTreeSum = 0;
37
- node15 && bst.subTreeTraverse(node => (subTreeSum += node.key), 15);
37
+ node15 && bst.dfs(node => (subTreeSum += node.key), 'in', 15);
38
38
  expect(subTreeSum).toBe(70);
39
39
 
40
40
  let lesserSum = 0;
@@ -231,7 +231,7 @@ describe('Individual package BST operations test', () => {
231
231
  expect(minNodeBySpecificNode?.key).toBe(12);
232
232
 
233
233
  let subTreeSum = 0;
234
- node15 && objBST.subTreeTraverse(node => (subTreeSum += node.key), node15);
234
+ node15 && objBST.dfs(node => (subTreeSum += node.key), 'in', node15);
235
235
  expect(subTreeSum).toBe(70);
236
236
 
237
237
  let lesserSum = 0;
@@ -11,23 +11,25 @@ const randomArray = getRandomIntArray(HUNDRED_THOUSAND, 0, HUNDRED_THOUSAND - 1,
11
11
  const cOrderedMap = new OrderedMap<number, number>();
12
12
 
13
13
  suite
14
- .add(`${HUNDRED_THOUSAND.toLocaleString()} add orderly`, () => {
14
+ .add(`${HUNDRED_THOUSAND.toLocaleString()} add`, () => {
15
+ rbTree.clear();
15
16
  for (let i = 0; i < randomArray.length; i++) rbTree.add(i);
16
17
  })
17
- .add(`${HUNDRED_THOUSAND.toLocaleString()} delete orderly`, () => {
18
- for (let i = 0; i < randomArray.length; i++) rbTree.delete(i);
19
- })
20
- .add(`${HUNDRED_THOUSAND.toLocaleString()} add randomly`, () => {
21
- rbTree.clear();
22
- for (let i = 0; i < randomArray.length; i++) rbTree.add(randomArray[i]);
18
+ .add(`${HUNDRED_THOUSAND.toLocaleString()} get`, () => {
19
+ for (let i = 0; i < randomArray.length; i++) rbTree.get(randomArray[i]);
23
20
  })
24
- .add(`${HUNDRED_THOUSAND.toLocaleString()} delete randomly`, () => {
25
- for (let i = 0; i < randomArray.length; i++) rbTree.delete(randomArray[i]);
21
+ .add(`${HUNDRED_THOUSAND.toLocaleString()} iterator`, () => {
22
+ const entries = [...rbTree];
23
+ return entries.length === HUNDRED_THOUSAND;
26
24
  })
27
- .add(`${HUNDRED_THOUSAND.toLocaleString()} add orderly`, () => {
25
+ .add(`${HUNDRED_THOUSAND.toLocaleString()} add & delete orderly`, () => {
26
+ rbTree.clear();
28
27
  for (let i = 0; i < randomArray.length; i++) rbTree.add(i);
28
+ for (let i = 0; i < randomArray.length; i++) rbTree.delete(i);
29
29
  })
30
- .add(`${HUNDRED_THOUSAND.toLocaleString()} delete randomly`, () => {
30
+ .add(`${HUNDRED_THOUSAND.toLocaleString()} add & delete randomly`, () => {
31
+ rbTree.clear();
32
+ for (let i = 0; i < randomArray.length; i++) rbTree.add(randomArray[i]);
31
33
  for (let i = 0; i < randomArray.length; i++) rbTree.delete(randomArray[i]);
32
34
  });
33
35
 
@@ -37,15 +39,4 @@ if (isCompetitor) {
37
39
  });
38
40
  }
39
41
 
40
- suite.add(`${HUNDRED_THOUSAND.toLocaleString()} getNode randomly`, () => {
41
- for (let i = 0; i < randomArray.length; i++) rbTree.getNode(randomArray[i]);
42
- });
43
-
44
- suite.add(`${HUNDRED_THOUSAND.toLocaleString()} add & iterator`, () => {
45
- rbTree.clear();
46
- for (let i = 0; i < randomArray.length; i++) rbTree.add(randomArray[i]);
47
- const entries = [...rbTree];
48
- return entries.length === HUNDRED_THOUSAND;
49
- });
50
-
51
42
  export { suite };
@@ -1,12 +1,4 @@
1
- import {
2
- AVLTreeMultiMap,
3
- AVLTreeMultiMapNode,
4
- AVLTreeNode,
5
- BinaryTreeNode,
6
- BSTNode,
7
- CP,
8
- IterationType
9
- } from '../../../../src';
1
+ import { AVLTreeMultiMap, AVLTreeMultiMapNode, AVLTreeNode, BinaryTreeNode, BSTNode } from '../../../../src';
10
2
  import { isDebugTest } from '../../../config';
11
3
 
12
4
  const isDebug = isDebugTest;
@@ -35,8 +27,11 @@ describe('AVLTreeMultiMap count', () => {
35
27
  [2, 2],
36
28
  [3, 3]
37
29
  ]);
38
- tm.lesserOrGreaterTraverse(node => (node.count += 2), CP.gt, 1);
39
- expect(tm.count).toBe(7);
30
+ tm.add([2, 2], undefined, 10);
31
+ tm.lesserOrGreaterTraverse(node => (node.count += 2), 'GT', 1);
32
+ tm.delete(2);
33
+ expect(tm.count).toBe(12);
34
+ expect(tm.getMutableCount()).toBe(16);
40
35
  });
41
36
  });
42
37
 
@@ -99,7 +94,7 @@ describe('AVLTreeMultiMap operations test1', () => {
99
94
  node15 && treeMultimap.dfs(node => (subTreeSum += node.key), 'pre', 15);
100
95
  expect(subTreeSum).toBe(31);
101
96
  let lesserSum = 0;
102
- treeMultimap.lesserOrGreaterTraverse((node: AVLTreeMultiMapNode<number>) => (lesserSum += node.key), CP.lt, 10);
97
+ treeMultimap.lesserOrGreaterTraverse((node: AVLTreeMultiMapNode<number>) => (lesserSum += node.key), 'LT', 10);
103
98
  expect(lesserSum).toBe(45);
104
99
 
105
100
  expect(node15 instanceof AVLTreeMultiMapNode);
@@ -110,7 +105,7 @@ describe('AVLTreeMultiMap operations test1', () => {
110
105
  const node11 = treeMultimap.getNode(11);
111
106
  expect(node11 instanceof AVLTreeMultiMapNode);
112
107
  if (node11 instanceof AVLTreeMultiMapNode) {
113
- const allGreaterNodesAdded = treeMultimap.lesserOrGreaterTraverse(node => (node.count += 2), CP.gt, 11);
108
+ const allGreaterNodesAdded = treeMultimap.lesserOrGreaterTraverse(node => (node.count += 2), 'GT', 11);
114
109
  expect(allGreaterNodesAdded);
115
110
  }
116
111
 
@@ -296,7 +291,7 @@ describe('AVLTreeMultiMap operations test1', () => {
296
291
 
297
292
  describe('AVLTreeMultiMap operations test recursively1', () => {
298
293
  it('should perform various operations on a Binary Search Tree with numeric values1', () => {
299
- const treeMultimap = new AVLTreeMultiMap<number>([], { iterationType: IterationType.RECURSIVE });
294
+ const treeMultimap = new AVLTreeMultiMap<number>([], { iterationType: 'RECURSIVE' });
300
295
 
301
296
  expect(treeMultimap instanceof AVLTreeMultiMap);
302
297
  treeMultimap.add([11, 11]);
@@ -353,7 +348,7 @@ describe('AVLTreeMultiMap operations test recursively1', () => {
353
348
  node15 && treeMultimap.dfs(node => (subTreeSum += node.key), 'pre', 15);
354
349
  expect(subTreeSum).toBe(31);
355
350
  let lesserSum = 0;
356
- treeMultimap.lesserOrGreaterTraverse((node: AVLTreeMultiMapNode<number>) => (lesserSum += node.key), CP.lt, 10);
351
+ treeMultimap.lesserOrGreaterTraverse((node: AVLTreeMultiMapNode<number>) => (lesserSum += node.key), 'LT', 10);
357
352
  expect(lesserSum).toBe(45);
358
353
 
359
354
  expect(node15 instanceof AVLTreeMultiMapNode);
@@ -364,7 +359,7 @@ describe('AVLTreeMultiMap operations test recursively1', () => {
364
359
  const node11 = treeMultimap.getNode(11);
365
360
  expect(node11 instanceof AVLTreeMultiMapNode);
366
361
  if (node11 instanceof AVLTreeMultiMapNode) {
367
- const allGreaterNodesAdded = treeMultimap.lesserOrGreaterTraverse(node => (node.count += 2), CP.gt, 11);
362
+ const allGreaterNodesAdded = treeMultimap.lesserOrGreaterTraverse(node => (node.count += 2), 'GT', 11);
368
363
  expect(allGreaterNodesAdded);
369
364
  }
370
365
 
@@ -569,7 +564,7 @@ describe('AVLTreeMultiMap Performance test', function () {
569
564
  }
570
565
  isDebug && console.log('---add', performance.now() - start);
571
566
  const startL = performance.now();
572
- treeMS.lesserOrGreaterTraverse(node => (node.count += 1), CP.lt, inputSize / 2);
567
+ treeMS.lesserOrGreaterTraverse(node => (node.count += 1), 'LT', inputSize / 2);
573
568
  isDebug && console.log('---lesserOrGreaterTraverse', performance.now() - startL);
574
569
  });
575
570
 
@@ -1,4 +1,4 @@
1
- import { AVLTree, AVLTreeNode, BinaryTreeNode, BSTNode, CP, IterationType } from '../../../../src';
1
+ import { AVLTree, AVLTreeNode, BinaryTreeNode, BSTNode } from '../../../../src';
2
2
 
3
3
  describe('AVL Tree Test', () => {
4
4
  it('should perform various operations on a AVL Tree', () => {
@@ -28,7 +28,7 @@ describe('AVL Tree Test', () => {
28
28
  expect(subTreeSum).toBe(70);
29
29
 
30
30
  let lesserSum = 0;
31
- tree.lesserOrGreaterTraverse(node => (lesserSum += node.key), CP.lt, 10);
31
+ tree.lesserOrGreaterTraverse(node => (lesserSum += node.key), 'LT', 10);
32
32
  expect(lesserSum).toBe(45);
33
33
 
34
34
  // node15 has type problem. After the uniform design, the generics of containers (DirectedGraph, BST) are based on the type of value. However, this design has a drawback: when I attempt to inherit from the Vertex or BSTNode classes, the types of the results obtained by all methods are those of the parent class.
@@ -112,7 +112,7 @@ describe('AVL Tree Test', () => {
112
112
  describe('AVL Tree Test recursively', () => {
113
113
  it('should perform various operations on a AVL Tree', () => {
114
114
  const arr = [11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];
115
- const tree = new AVLTree<number>([], { iterationType: IterationType.RECURSIVE });
115
+ const tree = new AVLTree<number>([], { iterationType: 'RECURSIVE' });
116
116
 
117
117
  for (const i of arr) tree.add([i, i]);
118
118
 
@@ -136,7 +136,7 @@ describe('AVL Tree Test recursively', () => {
136
136
  expect(subTreeSum).toBe(70);
137
137
 
138
138
  let lesserSum = 0;
139
- tree.lesserOrGreaterTraverse(node => (lesserSum += node.key), CP.lt, 10);
139
+ tree.lesserOrGreaterTraverse(node => (lesserSum += node.key), 'LT', 10);
140
140
  expect(lesserSum).toBe(45);
141
141
 
142
142
  // node15 has type problem. After the uniform design, the generics of containers (DirectedGraph, BST) are based on the type of value. However, this design has a drawback: when I attempt to inherit from the Vertex or BSTNode classes, the types of the results obtained by all methods are those of the parent class.