data-structure-typed 1.51.7 → 1.51.9

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 (123) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +13 -13
  3. package/benchmark/report.html +1 -37
  4. package/benchmark/report.json +15 -387
  5. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +103 -74
  6. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +116 -93
  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.d.ts +82 -62
  9. package/dist/cjs/data-structures/binary-tree/avl-tree.js +90 -71
  10. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  11. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +318 -233
  12. package/dist/cjs/data-structures/binary-tree/binary-tree.js +492 -392
  13. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  14. package/dist/cjs/data-structures/binary-tree/bst.d.ts +204 -251
  15. package/dist/cjs/data-structures/binary-tree/bst.js +256 -358
  16. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  17. package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +74 -85
  18. package/dist/cjs/data-structures/binary-tree/rb-tree.js +111 -119
  19. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
  20. package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +92 -76
  21. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +105 -93
  22. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  23. package/dist/cjs/data-structures/graph/abstract-graph.d.ts +10 -15
  24. package/dist/cjs/data-structures/graph/abstract-graph.js +10 -15
  25. package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
  26. package/dist/cjs/data-structures/hash/hash-map.d.ts +31 -38
  27. package/dist/cjs/data-structures/hash/hash-map.js +40 -55
  28. package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
  29. package/dist/cjs/data-structures/heap/heap.d.ts +1 -3
  30. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  31. package/dist/cjs/data-structures/queue/deque.d.ts +2 -3
  32. package/dist/cjs/data-structures/queue/deque.js +2 -3
  33. package/dist/cjs/data-structures/queue/deque.js.map +1 -1
  34. package/dist/cjs/data-structures/queue/queue.js.map +1 -1
  35. package/dist/cjs/data-structures/trie/trie.d.ts +1 -1
  36. package/dist/cjs/data-structures/trie/trie.js +1 -1
  37. package/dist/cjs/data-structures/trie/trie.js.map +1 -1
  38. package/dist/cjs/interfaces/binary-tree.d.ts +7 -7
  39. package/dist/cjs/types/common.d.ts +2 -3
  40. package/dist/cjs/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +4 -3
  41. package/dist/cjs/types/data-structures/binary-tree/avl-tree.d.ts +4 -3
  42. package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +6 -5
  43. package/dist/cjs/types/data-structures/binary-tree/bst.d.ts +6 -5
  44. package/dist/cjs/types/data-structures/binary-tree/rb-tree.d.ts +4 -3
  45. package/dist/cjs/types/data-structures/binary-tree/tree-multi-map.d.ts +4 -3
  46. package/dist/cjs/types/utils/utils.d.ts +10 -1
  47. package/dist/cjs/utils/utils.d.ts +2 -1
  48. package/dist/cjs/utils/utils.js +27 -1
  49. package/dist/cjs/utils/utils.js.map +1 -1
  50. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +103 -74
  51. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js +116 -93
  52. package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +82 -62
  53. package/dist/mjs/data-structures/binary-tree/avl-tree.js +90 -71
  54. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +318 -233
  55. package/dist/mjs/data-structures/binary-tree/binary-tree.js +493 -393
  56. package/dist/mjs/data-structures/binary-tree/bst.d.ts +204 -251
  57. package/dist/mjs/data-structures/binary-tree/bst.js +252 -357
  58. package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +74 -85
  59. package/dist/mjs/data-structures/binary-tree/rb-tree.js +111 -119
  60. package/dist/mjs/data-structures/binary-tree/tree-multi-map.d.ts +92 -76
  61. package/dist/mjs/data-structures/binary-tree/tree-multi-map.js +105 -93
  62. package/dist/mjs/data-structures/graph/abstract-graph.d.ts +10 -15
  63. package/dist/mjs/data-structures/graph/abstract-graph.js +10 -15
  64. package/dist/mjs/data-structures/hash/hash-map.d.ts +31 -38
  65. package/dist/mjs/data-structures/hash/hash-map.js +41 -55
  66. package/dist/mjs/data-structures/heap/heap.d.ts +1 -3
  67. package/dist/mjs/data-structures/queue/deque.d.ts +2 -3
  68. package/dist/mjs/data-structures/queue/deque.js +2 -3
  69. package/dist/mjs/data-structures/trie/trie.d.ts +1 -1
  70. package/dist/mjs/data-structures/trie/trie.js +1 -1
  71. package/dist/mjs/interfaces/binary-tree.d.ts +7 -7
  72. package/dist/mjs/types/common.d.ts +2 -3
  73. package/dist/mjs/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +4 -3
  74. package/dist/mjs/types/data-structures/binary-tree/avl-tree.d.ts +4 -3
  75. package/dist/mjs/types/data-structures/binary-tree/binary-tree.d.ts +6 -5
  76. package/dist/mjs/types/data-structures/binary-tree/bst.d.ts +6 -5
  77. package/dist/mjs/types/data-structures/binary-tree/rb-tree.d.ts +4 -3
  78. package/dist/mjs/types/data-structures/binary-tree/tree-multi-map.d.ts +4 -3
  79. package/dist/mjs/types/utils/utils.d.ts +10 -1
  80. package/dist/mjs/utils/utils.d.ts +2 -1
  81. package/dist/mjs/utils/utils.js +25 -0
  82. package/dist/umd/data-structure-typed.js +1427 -1343
  83. package/dist/umd/data-structure-typed.min.js +4 -4
  84. package/dist/umd/data-structure-typed.min.js.map +1 -1
  85. package/package.json +6 -6
  86. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +142 -100
  87. package/src/data-structures/binary-tree/avl-tree.ts +109 -80
  88. package/src/data-structures/binary-tree/binary-tree.ts +556 -433
  89. package/src/data-structures/binary-tree/bst.ts +286 -375
  90. package/src/data-structures/binary-tree/rb-tree.ts +132 -125
  91. package/src/data-structures/binary-tree/tree-multi-map.ts +129 -102
  92. package/src/data-structures/graph/abstract-graph.ts +10 -10
  93. package/src/data-structures/hash/hash-map.ts +42 -49
  94. package/src/data-structures/heap/heap.ts +1 -1
  95. package/src/data-structures/queue/deque.ts +2 -2
  96. package/src/data-structures/queue/queue.ts +1 -1
  97. package/src/data-structures/trie/trie.ts +2 -2
  98. package/src/interfaces/binary-tree.ts +11 -9
  99. package/src/types/common.ts +2 -3
  100. package/src/types/data-structures/binary-tree/avl-tree-multi-map.ts +4 -3
  101. package/src/types/data-structures/binary-tree/avl-tree.ts +4 -3
  102. package/src/types/data-structures/binary-tree/binary-tree.ts +7 -6
  103. package/src/types/data-structures/binary-tree/bst.ts +6 -5
  104. package/src/types/data-structures/binary-tree/rb-tree.ts +4 -3
  105. package/src/types/data-structures/binary-tree/tree-multi-map.ts +4 -3
  106. package/src/types/utils/utils.ts +14 -1
  107. package/src/utils/utils.ts +20 -1
  108. package/test/integration/all-in-one.test.ts +2 -2
  109. package/test/integration/avl-tree.test.ts +2 -2
  110. package/test/integration/bst.test.ts +3 -3
  111. package/test/integration/index.html +95 -11
  112. package/test/performance/reportor.ts +2 -3
  113. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +75 -7
  114. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +2 -2
  115. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +56 -0
  116. package/test/unit/data-structures/binary-tree/bst.test.ts +6 -6
  117. package/test/unit/data-structures/binary-tree/overall.test.ts +24 -20
  118. package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +6 -6
  119. package/test/unit/data-structures/graph/directed-graph.test.ts +2 -2
  120. package/test/unit/utils/utils.test.ts +5 -0
  121. package/test/utils/big-o.ts +12 -6
  122. package/test/utils/console.ts +1 -1
  123. package/tsconfig-base.json +1 -0
@@ -93,7 +93,7 @@ export class Heap<E = any> extends IterableElementBase<E> {
93
93
  * @param elements
94
94
  * @param options
95
95
  */
96
- static heapify<E>(elements: Iterable<E>, options: { comparator: Comparator<E> }): Heap<E> {
96
+ static heapify<E>(elements: Iterable<E>, options: HeapOptions<E>): Heap<E> {
97
97
  return new Heap<E>(elements, options);
98
98
  }
99
99
 
@@ -814,9 +814,9 @@ export class Deque<E> extends IterableElementBase<E> {
814
814
  /**
815
815
  * Time Complexity: O(n)
816
816
  * Space Complexity: O(1)
817
- * /
817
+ */
818
818
 
819
- /**
819
+ /**
820
820
  * Time Complexity: O(n)
821
821
  * Space Complexity: O(1)
822
822
  *
@@ -358,7 +358,7 @@ export class LinkedListQueue<E = any> extends SinglyLinkedList<E> {
358
358
  * @returns The `clone()` method is returning a new instance of `LinkedListQueue` with the same
359
359
  * values as the original `LinkedListQueue`.
360
360
  */
361
- clone(): LinkedListQueue<E> {
361
+ override clone(): LinkedListQueue<E> {
362
362
  return new LinkedListQueue<E>(this.values());
363
363
  }
364
364
  }
@@ -91,7 +91,7 @@ export class TrieNode {
91
91
  * 8. Autocomplete: Providing recommended words or phrases as a user types.
92
92
  * 9. Spell Check: Checking the spelling of words.
93
93
  * 10. IP Routing: Used in certain types of IP routing algorithms.
94
- * 11. Text Word Frequency Count: Counting and storing the frequency of words in a large amount of text data."
94
+ * 11. Text Word Frequency Count: Counting and storing the frequency of words in a large amount of text data.
95
95
  */
96
96
  export class Trie extends IterableElementBase<string, Trie> {
97
97
  /**
@@ -187,7 +187,7 @@ export class Trie extends IterableElementBase<string, Trie> {
187
187
  * @param {string} word - The word to check for.
188
188
  * @returns {boolean} True if the word is present in the Trie.
189
189
  */
190
- has(word: string): boolean {
190
+ override has(word: string): boolean {
191
191
  word = this._caseProcess(word);
192
192
  let cur = this.root;
193
193
  for (const c of word) {
@@ -1,26 +1,28 @@
1
1
  import { BinaryTree, BinaryTreeNode } from '../data-structures';
2
- import {
2
+ import type {
3
3
  BinaryTreeDeleteResult,
4
4
  BinaryTreeNested,
5
5
  BinaryTreeNodeNested,
6
6
  BinaryTreeOptions,
7
7
  BTNCallback,
8
+ Comparable,
8
9
  KeyOrNodeOrEntry
9
10
  } from '../types';
10
11
 
11
12
  export interface IBinaryTree<
12
- K = number,
13
+ K extends Comparable,
13
14
  V = any,
14
- N extends BinaryTreeNode<K, V, N> = BinaryTreeNodeNested<K, V>,
15
- TREE extends BinaryTree<K, V, N, TREE> = BinaryTreeNested<K, V, N>
15
+ R = [K, V],
16
+ NODE extends BinaryTreeNode<K, V, NODE> = BinaryTreeNodeNested<K, V>,
17
+ TREE extends BinaryTree<K, V, R, NODE, TREE> = BinaryTreeNested<K, V, R, NODE>
16
18
  > {
17
- createNode(key: K, value?: N['value']): N;
19
+ createNode(key: K, value?: NODE['value']): NODE;
18
20
 
19
- createTree(options?: Partial<BinaryTreeOptions<K>>): TREE;
21
+ createTree(options?: Partial<BinaryTreeOptions<K, V, R>>): TREE;
20
22
 
21
- add(keyOrNodeOrEntry: KeyOrNodeOrEntry<K, V, N>, value?: V, count?: number): boolean;
23
+ add(keyOrNodeOrEntryOrRawElement: KeyOrNodeOrEntry<K, V, NODE>, value?: V, count?: number): boolean;
22
24
 
23
- addMany(nodes: Iterable<KeyOrNodeOrEntry<K, V, N>>, values?: Iterable<V | undefined>): boolean[];
25
+ addMany(nodes: Iterable<KeyOrNodeOrEntry<K, V, NODE>>, values?: Iterable<V | undefined>): boolean[];
24
26
 
25
- delete<C extends BTNCallback<N>>(identifier: ReturnType<C> | null, callback: C): BinaryTreeDeleteResult<N>[];
27
+ delete<C extends BTNCallback<NODE>>(identifier: ReturnType<C> | null, callback: C): BinaryTreeDeleteResult<NODE>[];
26
28
  }
@@ -1,5 +1,4 @@
1
- export type BSTVariant = 'STANDARD' | 'INVERSE';
2
- export type CP = 'LT' | 'EQ' | 'GT';
1
+ export type CP = 1 | -1 | 0;
3
2
 
4
3
  /**
5
4
  * Enum representing different loop types.
@@ -39,7 +38,7 @@ export type KeyOrNodeOrEntry<K, V, N> = BTNEntry<K, V> | BTNKeyOrNode<K, N>;
39
38
 
40
39
  export type BTNodePureKeyOrNode<K, N> = K | N;
41
40
 
42
- export type BTNodePureExemplar<K, V, N> = [K, V | undefined] | BTNodePureKeyOrNode<K, N>;
41
+ export type BTNPureKeyOrNodeOrEntry<K, V, N> = [K, V | undefined] | BTNodePureKeyOrNode<K, N>;
43
42
 
44
43
  export type BSTNKeyOrNode<K, N> = K | undefined | N;
45
44
 
@@ -1,8 +1,9 @@
1
1
  import { AVLTreeMultiMap, AVLTreeMultiMapNode } from '../../../data-structures';
2
2
  import type { AVLTreeOptions } from './avl-tree';
3
+ import { Comparable } from "../../utils";
3
4
 
4
- export type AVLTreeMultiMapNodeNested<K, V> = AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
5
+ export type AVLTreeMultiMapNodeNested<K extends Comparable, V> = AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
5
6
 
6
- export type AVLTreeMultiMapNested<K, V, N extends AVLTreeMultiMapNode<K, V, N>> = AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, AVLTreeMultiMap<K, V, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
7
+ export type AVLTreeMultiMapNested<K extends Comparable, V, R, NODE extends AVLTreeMultiMapNode<K, V, NODE>> = AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, AVLTreeMultiMap<K, V, R, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
7
8
 
8
- export type AVLTreeMultiMapOptions<K> = AVLTreeOptions<K> & {}
9
+ export type AVLTreeMultiMapOptions<K, V, R> = AVLTreeOptions<K, V, R> & {}
@@ -1,8 +1,9 @@
1
1
  import { AVLTree, AVLTreeNode } from '../../../data-structures';
2
2
  import { BSTOptions } from './bst';
3
+ import { Comparable } from "../../utils";
3
4
 
4
- export type AVLTreeNodeNested<K, V> = AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
5
+ export type AVLTreeNodeNested<K extends Comparable, V> = AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, AVLTreeNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
5
6
 
6
- export type AVLTreeNested<K, V, N extends AVLTreeNode<K, V, N>> = AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, AVLTree<K, V, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
7
+ export type AVLTreeNested<K extends Comparable, V, R, NODE extends AVLTreeNode<K, V, NODE>> = AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, AVLTree<K, V, R, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
7
8
 
8
- export type AVLTreeOptions<K> = BSTOptions<K> & {};
9
+ export type AVLTreeOptions<K, V, R> = BSTOptions<K, V, R> & {};
@@ -1,11 +1,12 @@
1
1
  import { BinaryTree, BinaryTreeNode } from '../../../data-structures';
2
- import { IterationType } from "../../common";
2
+ import { BTNEntry, IterationType } from '../../common';
3
+ import { Comparable } from '../../utils';
3
4
 
4
- export type BinaryTreeNodeNested<K, V> = BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
5
+ export type BinaryTreeNodeNested<K extends Comparable, V> = BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, BinaryTreeNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
5
6
 
6
- export type BinaryTreeNested<K, V, NODE extends BinaryTreeNode<K, V, NODE>> = BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, BinaryTree<K, V, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
7
+ export type BinaryTreeNested<K extends Comparable, V, R, NODE extends BinaryTreeNode<K, V, NODE>> = BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, BinaryTree<K, V, R, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
7
8
 
8
- export type BinaryTreeOptions<K> = {
9
- iterationType?: IterationType,
10
- extractor?: (key: K) => number
9
+ export type BinaryTreeOptions<K, V, R> = {
10
+ iterationType?: IterationType
11
+ toEntryFn?: (rawElement: R) => BTNEntry<K, V>;
11
12
  }
@@ -1,11 +1,12 @@
1
1
  import { BST, BSTNode } from '../../../data-structures';
2
2
  import type { BinaryTreeOptions } from './binary-tree';
3
- import { BSTVariant } from "../../common";
3
+ import { Comparator } from '../../common';
4
+ import { Comparable } from '../../utils';
4
5
 
5
- export type BSTNodeNested<K, V> = BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
6
+ export type BSTNodeNested<K extends Comparable, V> = BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, BSTNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
6
7
 
7
- export type BSTNested<K, V, N extends BSTNode<K, V, N>> = BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, BST<K, V, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
8
+ export type BSTNested<K extends Comparable, V, R, NODE extends BSTNode<K, V, NODE>> = BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, BST<K, V, R, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
8
9
 
9
- export type BSTOptions<K> = BinaryTreeOptions<K> & {
10
- variant?: BSTVariant
10
+ export type BSTOptions<K, V, R> = BinaryTreeOptions<K, V, R> & {
11
+ comparator?: Comparator<K>
11
12
  }
@@ -1,10 +1,11 @@
1
1
  import { RedBlackTree, RedBlackTreeNode } from '../../../data-structures';
2
2
  import type { BSTOptions } from "./bst";
3
+ import { Comparable } from "../../utils";
3
4
 
4
5
  export type RBTNColor = 'RED' | 'BLACK';
5
6
 
6
- export type RedBlackTreeNodeNested<K, V> = RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
7
+ export type RedBlackTreeNodeNested<K extends Comparable, V> = RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, RedBlackTreeNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
7
8
 
8
- export type RedBlackTreeNested<K, V, N extends RedBlackTreeNode<K, V, N>> = RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, RedBlackTree<K, V, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
9
+ export type RedBlackTreeNested<K extends Comparable, V, R, NODE extends RedBlackTreeNode<K, V, NODE>> = RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, RedBlackTree<K, V, R, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
9
10
 
10
- export type RBTreeOptions<K> = Omit<BSTOptions<K>, 'variant'> & {};
11
+ export type RBTreeOptions<K, V, R> = BSTOptions<K, V, R> & {};
@@ -1,8 +1,9 @@
1
1
  import { TreeMultiMap, TreeMultiMapNode } from '../../../data-structures';
2
2
  import type { RBTreeOptions } from './rb-tree';
3
+ import { Comparable } from '../../utils';
3
4
 
4
- export type TreeMultiMapNodeNested<K, V> = TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
5
+ export type TreeMultiMapNodeNested<K extends Comparable, V> = TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, TreeMultiMapNode<K, V, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
5
6
 
6
- export type TreeMultiMapNested<K, V, N extends TreeMultiMapNode<K, V, N>> = TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, TreeMultiMap<K, V, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
7
+ export type TreeMultiMapNested<K extends Comparable, V, R, NODE extends TreeMultiMapNode<K, V, NODE>> = TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, TreeMultiMap<K, V, R, NODE, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
7
8
 
8
- export type TreeMultiMapOptions<K> = RBTreeOptions<K> & {}
9
+ export type TreeMultiMapOptions<K, V, R> = RBTreeOptions<K, V, R> & {}
@@ -5,4 +5,17 @@ export type TrlAsyncFn = (...args: any[]) => any;
5
5
 
6
6
  export type SpecifyOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
7
7
 
8
- export type Any = string | number | boolean | object | null | undefined | symbol;
8
+ export type Any = string | number | bigint | boolean | symbol | undefined | object;
9
+
10
+ export type Comparable =
11
+ | number
12
+ | string
13
+ | bigint
14
+ | boolean
15
+ | ({ [key in string]: any } & {
16
+ valueOf(): Comparable;
17
+ })
18
+ | ({ [key in string]: any } & {
19
+ toString(): Comparable;
20
+ })
21
+ | (() => Comparable);
@@ -5,7 +5,7 @@
5
5
  * @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
6
6
  * @license MIT License
7
7
  */
8
- import type { Thunk, ToThunkFn, TrlAsyncFn, TrlFn } from '../types';
8
+ import type { Comparable, Thunk, ToThunkFn, TrlAsyncFn, TrlFn } from '../types';
9
9
 
10
10
  export const uuidV4 = function () {
11
11
  return 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'.replace(/[x]/g, function (c) {
@@ -105,3 +105,22 @@ export const roundFixed = (num: number, digit: number = 10) => {
105
105
  const multiplier = Math.pow(10, digit);
106
106
  return Math.round(num * multiplier) / multiplier;
107
107
  };
108
+
109
+ export function isComparable(key: any): key is Comparable {
110
+ const keyType = typeof key;
111
+ if (keyType === 'number') return !isNaN(key);
112
+ if (keyType === 'string') return true;
113
+ if (keyType === 'bigint') return true;
114
+ if (keyType === 'boolean') return true;
115
+ if (keyType === 'symbol') return false;
116
+ if (keyType === 'undefined') return false;
117
+ if (keyType === 'function') return isComparable(key());
118
+ if (keyType === 'object') {
119
+ if (key === null) return true;
120
+ // if (typeof key.valueOf === 'function') return isComparable(key.valueOf()); // This will keep recursing because every object has a valueOf method.
121
+ // if (typeof key.toString === 'function') return isComparable(key.toString()); // This will also keep recursing because every string type has a toString method.
122
+ return false;
123
+ }
124
+
125
+ return false;
126
+ }
@@ -3,7 +3,7 @@ import { AVLTree } from 'data-structure-typed';
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', () => {
5
5
  const keys = [11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];
6
- const tree = new AVLTree();
6
+ const tree = new AVLTree<number>();
7
7
 
8
8
  for (const i of keys) tree.add([i, i]);
9
9
 
@@ -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), 'LT', 10);
30
+ tree.lesserOrGreaterTraverse(node => (lesserSum += node.key), -1, 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.
@@ -20,7 +20,7 @@ describe('AVL Tree Test', () => {
20
20
  [10, 10],
21
21
  [5, 5]
22
22
  ];
23
- const tree = new AVLTree();
23
+ const tree = new AVLTree<number, number>();
24
24
 
25
25
  for (const i of arr) tree.add(i);
26
26
 
@@ -44,7 +44,7 @@ describe('AVL Tree Test', () => {
44
44
  expect(subTreeSum).toBe(70);
45
45
 
46
46
  let lesserSum = 0;
47
- tree.lesserOrGreaterTraverse(node => (lesserSum += node.key), 'LT', 10);
47
+ tree.lesserOrGreaterTraverse(node => (lesserSum += node.key), -1, 10);
48
48
  expect(lesserSum).toBe(45);
49
49
 
50
50
  // 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.
@@ -2,7 +2,7 @@ import { BST, BSTNode } from 'bst-typed';
2
2
 
3
3
  describe('Individual package BST operations test', () => {
4
4
  it('should perform various operations on a Binary Search Tree with numeric values', () => {
5
- const bst = new BST();
5
+ const bst = new BST<number>();
6
6
  expect(bst).toBeInstanceOf(BST);
7
7
  bst.add([11, 11]);
8
8
  bst.add([3, 3]);
@@ -38,7 +38,7 @@ describe('Individual package BST operations test', () => {
38
38
  expect(subTreeSum).toBe(70);
39
39
 
40
40
  let lesserSum = 0;
41
- bst.lesserOrGreaterTraverse(node => (lesserSum += node.key), 'LT', 10);
41
+ bst.lesserOrGreaterTraverse(node => (lesserSum += node.key), -1, 10);
42
42
  expect(lesserSum).toBe(45);
43
43
 
44
44
  expect(node15).toBeInstanceOf(BSTNode);
@@ -235,7 +235,7 @@ describe('Individual package BST operations test', () => {
235
235
  expect(subTreeSum).toBe(70);
236
236
 
237
237
  let lesserSum = 0;
238
- objBST.lesserOrGreaterTraverse(node => (lesserSum += node.key), 'LT', 10);
238
+ objBST.lesserOrGreaterTraverse(node => (lesserSum += node.key), -1, 10);
239
239
  expect(lesserSum).toBe(45);
240
240
 
241
241
  expect(node15).toBeInstanceOf(BSTNode);
@@ -11,6 +11,20 @@
11
11
  <!-- <script src='https://cdn.jsdelivr.net/npm/data-structure-typed@1.44.0/dist/umd/data-structure-typed.min.js'></script>-->
12
12
 
13
13
  <script src='https://unpkg.com/js-sdsl@4.4.2/dist/umd/js-sdsl.js'></script>
14
+ <script>
15
+ const logPerf = function (label = 'function running cost', fn, args, thisArg) {
16
+ const start = performance.now();
17
+ let result;
18
+ if (thisArg) {
19
+ if (args && args.length > 0) result = fn.apply(thisArg, args);
20
+ else result = fn.apply(thisArg);
21
+ } else {
22
+ if (args && args.length > 0) result = fn(...args);
23
+ else result = fn();
24
+ }
25
+ console.log(`${(performance.now() - start).toFixed(2)} ms, ${label}, ${result}`);
26
+ }
27
+ </script>
14
28
  </head>
15
29
  <body>
16
30
  <div id='app'>
@@ -26,19 +40,19 @@
26
40
  const { Queue } = dataStructureTyped;
27
41
  const queue = new Queue();
28
42
  const n = 1000000;
29
- const startEn = performance.now();
30
- for (let i = 0; i < n; i++) {
31
- queue.push(i);
32
- }
33
- console.log((performance.now() - startEn).toFixed(2), `Queue ${n.toLocaleString()} enqueue `);
34
- let last = 0;
35
- const startTime = performance.now();
43
+ logPerf(`Queue ${n.toLocaleString()} enqueue`, () => {
44
+ for (let i = 0; i < n; i++) {
45
+ queue.push(i);
46
+ }
47
+ })
36
48
 
37
- for (let i = 0; i < n; i++) {
38
- last = queue.shift();
39
- }
49
+ let last = 0;
40
50
 
41
- console.log((performance.now() - startTime).toFixed(2), `Queue ${n.toLocaleString()} dequeue `);
51
+ logPerf(`Queue ${n.toLocaleString()} dequeue `, () => {
52
+ for (let i = 0; i < n; i++) {
53
+ last = queue.shift();
54
+ }
55
+ })
42
56
 
43
57
  } catch (e) {
44
58
  console.error(e);
@@ -371,6 +385,76 @@
371
385
  } catch (e) {
372
386
  console.error(e);
373
387
  }
388
+
389
+ function heapTest() {
390
+ const heap = new dataStructureTyped.Heap([], { comparator: (a, b) => b - a });
391
+
392
+ heap.add(10);
393
+ heap.add(5);
394
+ heap.add(15);
395
+
396
+ const max = heap.poll();
397
+ console.log(max); // 15
398
+
399
+ const max2 = heap.peek();
400
+ console.log(max2); // 15
401
+
402
+ let isEmpty = heap.isEmpty();
403
+ console.log(isEmpty); // false
404
+
405
+ heap.clear();
406
+ isEmpty = heap.isEmpty();
407
+ console.log(isEmpty); // true
408
+
409
+ const minNumHeap = new dataStructureTyped.MinHeap([1, 6, 2, 0, 5]);
410
+ minNumHeap.add(9);
411
+ minNumHeap.has(1) // true
412
+ minNumHeap.has(2) // true
413
+ minNumHeap.poll() // 0
414
+ minNumHeap.poll() // 1
415
+ minNumHeap.peek() // 2
416
+ minNumHeap.has(1); // false
417
+ minNumHeap.has(2); // true
418
+
419
+ const arrFromHeap = minNumHeap.toArray();
420
+ arrFromHeap.length // 4
421
+ arrFromHeap[0] // 2
422
+ arrFromHeap[1] // 5
423
+ arrFromHeap[2] // 9
424
+ arrFromHeap[3] // 6
425
+ minNumHeap.sort() // [2, 5, 6, 9]
426
+
427
+ const maxHeap = new dataStructureTyped.MaxHeap([], { comparator: (a, b) => b.keyA - a.keyA });
428
+ const obj1 = { keyA: 'a1' }, obj6 = { keyA: 'a6' }, obj5 = { keyA: 'a5' }, obj2 = { keyA: 'a2' },
429
+ obj0 = { keyA: 'a0' }, obj9 = { keyA: 'a9' };
430
+
431
+ maxHeap.add(obj1);
432
+ maxHeap.has(obj1) // true
433
+ maxHeap.has(obj9) // false
434
+ maxHeap.add(obj6);
435
+ maxHeap.has(obj6) // true
436
+ maxHeap.add(obj5);
437
+ maxHeap.add(obj2);
438
+ maxHeap.add(obj0);
439
+ maxHeap.add(obj9);
440
+ maxHeap.has(obj9) // true
441
+
442
+ const peek9 = maxHeap.peek();
443
+ console.log(peek9.keyA) // 'a9'
444
+
445
+ const heapToArr = maxHeap.toArray();
446
+ console.log(heapToArr.map(ele => ele?.keyA)); // ['a9', 'a2', 'a6', 'a1', 'a0', 'a5']
447
+
448
+ const values = ['a9', 'a6', 'a5', 'a2', 'a1', 'a0'];
449
+ let i = 0;
450
+ while (maxHeap.size > 0) {
451
+ const polled = maxHeap.poll();
452
+ console.log(polled.keyA) // values[i]
453
+ i++;
454
+ }
455
+ }
456
+
457
+
374
458
  </script>
375
459
 
376
460
  </body>
@@ -2,13 +2,12 @@ import * as Benchmark from 'benchmark';
2
2
  import * as path from 'path';
3
3
  import * as fs from 'fs';
4
4
  import * as fastGlob from 'fast-glob';
5
- import { Color, numberFix, render } from '../utils';
5
+ import { ConsoleColor, numberFix, render } from '../utils';
6
6
  import { PerformanceTest } from './types';
7
- import * as console from 'console';
8
7
 
9
8
  const args = process.argv.slice(2);
10
9
 
11
- const { GREEN, BOLD, END, YELLOW, GRAY, CYAN, BG_YELLOW } = Color;
10
+ const { GREEN, BOLD, END, YELLOW, GRAY, CYAN, BG_YELLOW } = ConsoleColor;
12
11
 
13
12
  const getRelativePath = (file: string) => {
14
13
  return path.relative(__dirname, file);