data-structure-typed 1.52.9 → 1.53.1

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 (65) 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 +24 -384
  5. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +21 -21
  6. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +64 -47
  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 +20 -20
  9. package/dist/cjs/data-structures/binary-tree/avl-tree.js +29 -27
  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 +186 -144
  12. package/dist/cjs/data-structures/binary-tree/binary-tree.js +376 -265
  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 +56 -56
  15. package/dist/cjs/data-structures/binary-tree/bst.js +108 -78
  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 +13 -13
  18. package/dist/cjs/data-structures/binary-tree/rb-tree.js +42 -36
  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 +21 -21
  21. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +59 -49
  22. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  23. package/dist/cjs/data-structures/trie/trie.js +3 -3
  24. package/dist/cjs/interfaces/binary-tree.d.ts +5 -5
  25. package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +13 -13
  26. package/dist/cjs/types/data-structures/binary-tree/bst.d.ts +3 -3
  27. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +21 -21
  28. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js +64 -46
  29. package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +20 -20
  30. package/dist/mjs/data-structures/binary-tree/avl-tree.js +29 -26
  31. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +186 -144
  32. package/dist/mjs/data-structures/binary-tree/binary-tree.js +376 -264
  33. package/dist/mjs/data-structures/binary-tree/bst.d.ts +56 -56
  34. package/dist/mjs/data-structures/binary-tree/bst.js +108 -76
  35. package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +13 -13
  36. package/dist/mjs/data-structures/binary-tree/rb-tree.js +42 -35
  37. package/dist/mjs/data-structures/binary-tree/tree-multi-map.d.ts +21 -21
  38. package/dist/mjs/data-structures/binary-tree/tree-multi-map.js +59 -48
  39. package/dist/mjs/data-structures/trie/trie.js +3 -3
  40. package/dist/mjs/interfaces/binary-tree.d.ts +5 -5
  41. package/dist/mjs/types/data-structures/binary-tree/binary-tree.d.ts +13 -13
  42. package/dist/mjs/types/data-structures/binary-tree/bst.d.ts +3 -3
  43. package/dist/umd/data-structure-typed.js +596 -468
  44. package/dist/umd/data-structure-typed.min.js +5 -5
  45. package/dist/umd/data-structure-typed.min.js.map +1 -1
  46. package/package.json +6 -6
  47. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +60 -54
  48. package/src/data-structures/binary-tree/avl-tree.ts +32 -35
  49. package/src/data-structures/binary-tree/binary-tree.ts +440 -360
  50. package/src/data-structures/binary-tree/bst.ts +144 -113
  51. package/src/data-structures/binary-tree/rb-tree.ts +44 -43
  52. package/src/data-structures/binary-tree/tree-multi-map.ts +57 -61
  53. package/src/data-structures/trie/trie.ts +3 -3
  54. package/src/interfaces/binary-tree.ts +6 -6
  55. package/src/types/data-structures/binary-tree/binary-tree.ts +13 -14
  56. package/src/types/data-structures/binary-tree/bst.ts +3 -3
  57. package/test/performance/data-structures/binary-tree/binary-tree-overall.test.ts +2 -2
  58. package/test/performance/data-structures/binary-tree/rb-tree.test.ts +9 -1
  59. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +115 -3
  60. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +109 -4
  61. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +183 -46
  62. package/test/unit/data-structures/binary-tree/bst.test.ts +340 -21
  63. package/test/unit/data-structures/binary-tree/rb-tree.test.ts +19 -0
  64. package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +141 -3
  65. package/test/utils/array.ts +15 -12
@@ -34,7 +34,7 @@ export class RedBlackTreeNode extends BSTNode {
34
34
  export class RedBlackTree extends BST {
35
35
  /**
36
36
  * This is the constructor function for a Red-Black Tree data structure in TypeScript.
37
- * @param keysOrNodesOrEntriesOrRaws - The `keysOrNodesOrEntriesOrRaws` parameter is an
37
+ * @param keysNodesEntriesOrRaws - The `keysNodesEntriesOrRaws` parameter is an
38
38
  * iterable object that can contain either keys, nodes, entries, or raw elements. It is used to
39
39
  * initialize the RBTree with the provided elements.
40
40
  * @param [options] - The `options` parameter is an optional object that can be passed to the
@@ -42,11 +42,11 @@ export class RedBlackTree extends BST {
42
42
  * configuring the behavior of the Red-Black Tree. The specific properties and their meanings would
43
43
  * depend on the implementation
44
44
  */
45
- constructor(keysOrNodesOrEntriesOrRaws = [], options) {
45
+ constructor(keysNodesEntriesOrRaws = [], options) {
46
46
  super([], options);
47
47
  this._root = this.NIL;
48
- if (keysOrNodesOrEntriesOrRaws) {
49
- this.addMany(keysOrNodesOrEntriesOrRaws);
48
+ if (keysNodesEntriesOrRaws) {
49
+ this.addMany(keysNodesEntriesOrRaws);
50
50
  }
51
51
  }
52
52
  _root;
@@ -72,7 +72,7 @@ export class RedBlackTree extends BST {
72
72
  * returned.
73
73
  */
74
74
  createNode(key, value, color = 'BLACK') {
75
- return new RedBlackTreeNode(key, value, color);
75
+ return new RedBlackTreeNode(key, this._isMapMode ? undefined : value, color);
76
76
  }
77
77
  /**
78
78
  * The function creates a new Red-Black Tree with the specified options.
@@ -83,6 +83,7 @@ export class RedBlackTree extends BST {
83
83
  createTree(options) {
84
84
  return new RedBlackTree([], {
85
85
  iterationType: this.iterationType,
86
+ isMapMode: this._isMapMode,
86
87
  comparator: this._comparator,
87
88
  toEntryFn: this._toEntryFn,
88
89
  ...options
@@ -93,13 +94,13 @@ export class RedBlackTree extends BST {
93
94
  * Space Complexity: O(1)
94
95
  *
95
96
  * The function checks if the input is an instance of the RedBlackTreeNode class.
96
- * @param {BTNKeyOrNodeOrEntry<K, V, NODE> | R} keyOrNodeOrEntryOrRaw - The parameter
97
- * `keyOrNodeOrEntryOrRaw` can be of type `R` or `BTNKeyOrNodeOrEntry<K, V, NODE>`.
98
- * @returns a boolean value indicating whether the input parameter `keyOrNodeOrEntryOrRaw` is
97
+ * @param {BTNRep<K, V, NODE> | R} keyNodeEntryOrRaw - The parameter
98
+ * `keyNodeEntryOrRaw` can be of type `R` or `BTNRep<K, V, NODE>`.
99
+ * @returns a boolean value indicating whether the input parameter `keyNodeEntryOrRaw` is
99
100
  * an instance of the `RedBlackTreeNode` class.
100
101
  */
101
- isNode(keyOrNodeOrEntryOrRaw) {
102
- return keyOrNodeOrEntryOrRaw instanceof RedBlackTreeNode;
102
+ isNode(keyNodeEntryOrRaw) {
103
+ return keyNodeEntryOrRaw instanceof RedBlackTreeNode;
103
104
  }
104
105
  // /**
105
106
  // * Time Complexity: O(1)
@@ -110,29 +111,29 @@ export class RedBlackTree extends BST {
110
111
  // * Time Complexity: O(1)
111
112
  // * Space Complexity: O(1)
112
113
  // *
113
- // * The function `keyValueOrEntryOrRawElementToNode` takes a key, value, or entry and returns a node if it is
114
+ // * The function `keyValueNodeEntryRawToNodeAndValue` takes a key, value, or entry and returns a node if it is
114
115
  // * valid, otherwise it returns undefined.
115
- // * @param {BTNKeyOrNodeOrEntry<K, V, NODE>} keyOrNodeOrEntryOrRaw - The key, value, or entry to convert.
116
- // * @param {V} [value] - The value associated with the key (if `keyOrNodeOrEntryOrRaw` is a key).
116
+ // * @param {BTNRep<K, V, NODE>} keyNodeEntryOrRaw - The key, value, or entry to convert.
117
+ // * @param {V} [value] - The value associated with the key (if `keyNodeEntryOrRaw` is a key).
117
118
  // * @returns {NODE | undefined} - The corresponding Red-Black Tree node, or `undefined` if conversion fails.
118
119
  // */
119
- // override keyValueOrEntryOrRawElementToNode(keyOrNodeOrEntryOrRaw: BTNKeyOrNodeOrEntry<K, V, NODE> | R, value?: V): NODE | undefined {
120
+ // override keyValueNodeEntryRawToNodeAndValue(keyNodeEntryOrRaw: BTNRep<K, V, NODE> | R, value?: V): NODE | undefined {
120
121
  //
121
- // if (keyOrNodeOrEntryOrRaw === null || keyOrNodeOrEntryOrRaw === undefined) return;
122
- // if (this.isNode(keyOrNodeOrEntryOrRaw)) return keyOrNodeOrEntryOrRaw;
122
+ // if (keyNodeEntryOrRaw === null || keyNodeEntryOrRaw === undefined) return;
123
+ // if (this.isNode(keyNodeEntryOrRaw)) return keyNodeEntryOrRaw;
123
124
  //
124
125
  // if (this._toEntryFn) {
125
- // const [key, entryValue] = this._toEntryFn(keyOrNodeOrEntryOrRaw as R);
126
- // if (this.isKey(key)) return this.createNode(key, entryValue ?? value, 'RED');
126
+ // const [key, entryValue] = this._toEntryFn(keyNodeEntryOrRaw as R);
127
+ // if (this.isKey(key)) return this.createNode(key, value ?? entryValue, 'RED');
127
128
  // }
128
129
  //
129
- // if (this.isEntry(keyOrNodeOrEntryOrRaw)) {
130
- // const [key, value] = keyOrNodeOrEntryOrRaw;
130
+ // if (this.isEntry(keyNodeEntryOrRaw)) {
131
+ // const [key, value] = keyNodeEntryOrRaw;
131
132
  // if (key === undefined || key === null) return;
132
133
  // else return this.createNode(key, value, 'RED');
133
134
  // }
134
135
  //
135
- // if (this.isKey(keyOrNodeOrEntryOrRaw)) return this.createNode(keyOrNodeOrEntryOrRaw, value, 'RED');
136
+ // if (this.isKey(keyNodeEntryOrRaw)) return this.createNode(keyNodeEntryOrRaw, value, 'RED');
136
137
  //
137
138
  // return ;
138
139
  // }
@@ -153,8 +154,8 @@ export class RedBlackTree extends BST {
153
154
  *
154
155
  * The function adds a new node to a binary search tree and returns true if the node was successfully
155
156
  * added.
156
- * @param {BTNKeyOrNodeOrEntry<K, V, NODE> | R} keyOrNodeOrEntryOrRaw - The parameter
157
- * `keyOrNodeOrEntryOrRaw` can accept a value of type `R` or `BTNKeyOrNodeOrEntry<K, V, NODE>`.
157
+ * @param {BTNRep<K, V, NODE> | R} keyNodeEntryOrRaw - The parameter
158
+ * `keyNodeEntryOrRaw` can accept a value of type `R` or `BTNRep<K, V, NODE>`.
158
159
  * @param {V} [value] - The `value` parameter is an optional value that you want to associate with
159
160
  * the key in the data structure. It represents the value that you want to add or update in the data
160
161
  * structure.
@@ -162,8 +163,8 @@ export class RedBlackTree extends BST {
162
163
  * the method returns true. If the node already exists and its value is updated, the method also
163
164
  * returns true. If the node cannot be added or updated, the method returns false.
164
165
  */
165
- add(keyOrNodeOrEntryOrRaw, value) {
166
- const newNode = this.keyValueOrEntryOrRawElementToNode(keyOrNodeOrEntryOrRaw, value);
166
+ add(keyNodeEntryOrRaw, value) {
167
+ const [newNode, newValue] = this.keyValueNodeEntryRawToNodeAndValue(keyNodeEntryOrRaw, value);
167
168
  if (!this.isRealNode(newNode))
168
169
  return false;
169
170
  const insertStatus = this._insert(newNode);
@@ -175,11 +176,17 @@ export class RedBlackTree extends BST {
175
176
  else {
176
177
  return false;
177
178
  }
179
+ if (this._isMapMode)
180
+ this._setValue(newNode.key, newValue);
178
181
  this._size++;
179
182
  return true;
180
183
  }
181
- else
182
- return insertStatus === 'UPDATED';
184
+ if (insertStatus === 'UPDATED') {
185
+ if (this._isMapMode)
186
+ this._setValue(newNode.key, newValue);
187
+ return true;
188
+ }
189
+ return false;
183
190
  }
184
191
  /**
185
192
  * Time Complexity: O(log n)
@@ -187,7 +194,7 @@ export class RedBlackTree extends BST {
187
194
  *
188
195
  * The function overrides the delete method in a binary tree data structure to remove a node based on
189
196
  * a given predicate and maintain the binary search tree properties.
190
- * @param {BTNKeyOrNodeOrEntry<K, V, NODE> | R} keyOrNodeOrEntryOrRaw - The `keyOrNodeOrEntryOrRaw`
197
+ * @param {BTNRep<K, V, NODE> | R} keyNodeEntryOrRaw - The `keyNodeEntryOrRaw`
191
198
  * parameter in the `override delete` method is used to specify the condition or key based on which a
192
199
  * node should be deleted from the binary tree. It can be a key, a node, an entry, or a predicate
193
200
  * function that determines which node(s) should be deleted.
@@ -195,17 +202,15 @@ export class RedBlackTree extends BST {
195
202
  * objects. Each object in the array contains information about the deleted node and whether
196
203
  * balancing is needed.
197
204
  */
198
- delete(keyOrNodeOrEntryOrRaw) {
199
- if (keyOrNodeOrEntryOrRaw === null)
205
+ delete(keyNodeEntryOrRaw) {
206
+ if (keyNodeEntryOrRaw === null)
200
207
  return [];
201
208
  const results = [];
202
209
  let nodeToDelete;
203
- if (this._isPredicated(keyOrNodeOrEntryOrRaw))
204
- nodeToDelete = this.getNode(keyOrNodeOrEntryOrRaw);
210
+ if (this._isPredicate(keyNodeEntryOrRaw))
211
+ nodeToDelete = this.getNode(keyNodeEntryOrRaw);
205
212
  else
206
- nodeToDelete = this.isRealNode(keyOrNodeOrEntryOrRaw)
207
- ? keyOrNodeOrEntryOrRaw
208
- : this.getNode(keyOrNodeOrEntryOrRaw);
213
+ nodeToDelete = this.isRealNode(keyNodeEntryOrRaw) ? keyNodeEntryOrRaw : this.getNode(keyNodeEntryOrRaw);
209
214
  if (!nodeToDelete) {
210
215
  return results;
211
216
  }
@@ -244,6 +249,8 @@ export class RedBlackTree extends BST {
244
249
  successor.color = nodeToDelete.color;
245
250
  }
246
251
  }
252
+ if (this._isMapMode)
253
+ this._store.delete(nodeToDelete.key);
247
254
  this._size--;
248
255
  // If the original color was black, fix the tree
249
256
  if (originalColor === 'BLACK') {
@@ -5,7 +5,7 @@
5
5
  * @copyright Copyright (c) 2022 Pablo Zeng <zrwusa@gmail.com>
6
6
  * @license MIT License
7
7
  */
8
- import type { BinaryTreeDeleteResult, BSTNKeyOrNode, BTNKeyOrNodeOrEntry, IterationType, RBTNColor, TreeMultiMapNested, TreeMultiMapNodeNested, TreeMultiMapOptions, BTNEntry } from '../../types';
8
+ import type { BinaryTreeDeleteResult, BSTNOptKeyOrNode, BTNRep, IterationType, RBTNColor, TreeMultiMapNested, TreeMultiMapNodeNested, TreeMultiMapOptions } from '../../types';
9
9
  import { IBinaryTree } from '../../interfaces';
10
10
  import { RedBlackTree, RedBlackTreeNode } from './rb-tree';
11
11
  export declare class TreeMultiMapNode<K = any, V = any, NODE extends TreeMultiMapNode<K, V, NODE> = TreeMultiMapNodeNested<K, V>> extends RedBlackTreeNode<K, V, NODE> {
@@ -35,17 +35,17 @@ export declare class TreeMultiMapNode<K = any, V = any, NODE extends TreeMultiMa
35
35
  */
36
36
  set count(value: number);
37
37
  }
38
- export declare class TreeMultiMap<K = any, V = any, R = BTNEntry<K, V>, NODE extends TreeMultiMapNode<K, V, NODE> = TreeMultiMapNode<K, V, TreeMultiMapNodeNested<K, V>>, TREE extends TreeMultiMap<K, V, R, NODE, TREE> = TreeMultiMap<K, V, R, NODE, TreeMultiMapNested<K, V, R, NODE>>> extends RedBlackTree<K, V, R, NODE, TREE> implements IBinaryTree<K, V, R, NODE, TREE> {
38
+ export declare class TreeMultiMap<K = any, V = any, R = object, NODE extends TreeMultiMapNode<K, V, NODE> = TreeMultiMapNode<K, V, TreeMultiMapNodeNested<K, V>>, TREE extends TreeMultiMap<K, V, R, NODE, TREE> = TreeMultiMap<K, V, R, NODE, TreeMultiMapNested<K, V, R, NODE>>> extends RedBlackTree<K, V, R, NODE, TREE> implements IBinaryTree<K, V, R, NODE, TREE> {
39
39
  /**
40
40
  * The constructor function initializes a TreeMultiMap object with optional initial data.
41
- * @param keysOrNodesOrEntriesOrRaws - The parameter `keysOrNodesOrEntriesOrRaws` is an
41
+ * @param keysNodesEntriesOrRaws - The parameter `keysNodesEntriesOrRaws` is an
42
42
  * iterable that can contain keys, nodes, entries, or raw elements. It is used to initialize the
43
43
  * TreeMultiMap with initial data.
44
44
  * @param [options] - The `options` parameter is an optional object that can be used to customize the
45
45
  * behavior of the `TreeMultiMap` constructor. It can include properties such as `compareKeys` and
46
46
  * `compareValues`, which are functions used to compare keys and values respectively.
47
47
  */
48
- constructor(keysOrNodesOrEntriesOrRaws?: Iterable<BTNKeyOrNodeOrEntry<K, V, NODE>>, options?: TreeMultiMapOptions<K, V, R>);
48
+ constructor(keysNodesEntriesOrRaws?: Iterable<BTNRep<K, V, NODE>>, options?: TreeMultiMapOptions<K, V, R>);
49
49
  protected _count: number;
50
50
  /**
51
51
  * The function calculates the sum of the count property of all nodes in a tree structure.
@@ -85,10 +85,10 @@ export declare class TreeMultiMap<K = any, V = any, R = BTNEntry<K, V>, NODE ext
85
85
  */
86
86
  createTree(options?: TreeMultiMapOptions<K, V, R>): TREE;
87
87
  /**
88
- * The function `keyValueOrEntryOrRawElementToNode` takes in a key, value, and count and returns a
88
+ * The function `keyValueNodeEntryRawToNodeAndValue` takes in a key, value, and count and returns a
89
89
  * node based on the input.
90
- * @param {BTNKeyOrNodeOrEntry<K, V, NODE> | R} keyOrNodeOrEntryOrRaw - The parameter
91
- * `keyOrNodeOrEntryOrRaw` can be of type `R` or `BTNKeyOrNodeOrEntry<K, V, NODE>`.
90
+ * @param {BTNRep<K, V, NODE> | R} keyNodeEntryOrRaw - The parameter
91
+ * `keyNodeEntryOrRaw` can be of type `R` or `BTNRep<K, V, NODE>`.
92
92
  * @param {V} [value] - The `value` parameter is an optional value that represents the value
93
93
  * associated with the key in the node. It is used when creating a new node or updating the value of
94
94
  * an existing node.
@@ -96,23 +96,23 @@ export declare class TreeMultiMap<K = any, V = any, R = BTNEntry<K, V>, NODE ext
96
96
  * times the key-value pair should be added to the data structure. If not provided, it defaults to 1.
97
97
  * @returns either a NODE object or undefined.
98
98
  */
99
- keyValueOrEntryOrRawElementToNode(keyOrNodeOrEntryOrRaw: BTNKeyOrNodeOrEntry<K, V, NODE> | R, value?: V, count?: number): NODE | undefined;
99
+ keyValueNodeEntryRawToNodeAndValue(keyNodeEntryOrRaw: BTNRep<K, V, NODE> | R, value?: V, count?: number): [NODE | undefined, V | undefined];
100
100
  /**
101
101
  * The function checks if the input is an instance of the TreeMultiMapNode class.
102
- * @param {BTNKeyOrNodeOrEntry<K, V, NODE> | R} keyOrNodeOrEntryOrRaw - The parameter
103
- * `keyOrNodeOrEntryOrRaw` can be of type `R` or `BTNKeyOrNodeOrEntry<K, V, NODE>`.
104
- * @returns a boolean value indicating whether the input parameter `keyOrNodeOrEntryOrRaw` is
102
+ * @param {BTNRep<K, V, NODE> | R} keyNodeEntryOrRaw - The parameter
103
+ * `keyNodeEntryOrRaw` can be of type `R` or `BTNRep<K, V, NODE>`.
104
+ * @returns a boolean value indicating whether the input parameter `keyNodeEntryOrRaw` is
105
105
  * an instance of the `TreeMultiMapNode` class.
106
106
  */
107
- isNode(keyOrNodeOrEntryOrRaw: BTNKeyOrNodeOrEntry<K, V, NODE> | R): keyOrNodeOrEntryOrRaw is NODE;
107
+ isNode(keyNodeEntryOrRaw: BTNRep<K, V, NODE> | R): keyNodeEntryOrRaw is NODE;
108
108
  /**
109
109
  * Time Complexity: O(log n)
110
110
  * Space Complexity: O(1)
111
111
  *
112
112
  * The function overrides the add method of a class and adds a new node to a data structure, updating
113
113
  * the count and returning a boolean indicating success.
114
- * @param {BTNKeyOrNodeOrEntry<K, V, NODE> | R} keyOrNodeOrEntryOrRaw - The
115
- * `keyOrNodeOrEntryOrRaw` parameter can accept one of the following types:
114
+ * @param {BTNRep<K, V, NODE> | R} keyNodeEntryOrRaw - The
115
+ * `keyNodeEntryOrRaw` parameter can accept one of the following types:
116
116
  * @param {V} [value] - The `value` parameter represents the value associated with the key in the
117
117
  * data structure. It is an optional parameter, so it can be omitted if not needed.
118
118
  * @param [count=1] - The `count` parameter represents the number of times the key-value pair should
@@ -121,14 +121,14 @@ export declare class TreeMultiMap<K = any, V = any, R = BTNEntry<K, V>, NODE ext
121
121
  * @returns The method is returning a boolean value. It returns true if the addition of the new node
122
122
  * was successful, and false otherwise.
123
123
  */
124
- add(keyOrNodeOrEntryOrRaw: BTNKeyOrNodeOrEntry<K, V, NODE> | R, value?: V, count?: number): boolean;
124
+ add(keyNodeEntryOrRaw: BTNRep<K, V, NODE> | R, value?: V, count?: number): boolean;
125
125
  /**
126
126
  * Time Complexity: O(log n)
127
127
  * Space Complexity: O(1)
128
128
  *
129
129
  * The function `delete` in TypeScript overrides the deletion operation in a binary tree data
130
130
  * structure, handling cases where nodes have children and maintaining balance in the tree.
131
- * @param {BTNKeyOrNodeOrEntry<K, V, NODE> | R} keyOrNodeOrEntryOrRaw - The `predicate`
131
+ * @param {BTNRep<K, V, NODE> | R} keyNodeEntryOrRaw - The `predicate`
132
132
  * parameter in the `delete` method is used to specify the condition or key based on which a node
133
133
  * should be deleted from the binary tree. It can be a key, a node, or an entry.
134
134
  * @param [ignoreCount=false] - The `ignoreCount` parameter in the `override delete` method is a
@@ -137,7 +137,7 @@ export declare class TreeMultiMap<K = any, V = any, R = BTNEntry<K, V>, NODE ext
137
137
  * `ignoreCount` is `false
138
138
  * @returns The `override delete` method returns an array of `BinaryTreeDeleteResult<NODE>` objects.
139
139
  */
140
- delete(keyOrNodeOrEntryOrRaw: BTNKeyOrNodeOrEntry<K, V, NODE> | R, ignoreCount?: boolean): BinaryTreeDeleteResult<NODE>[];
140
+ delete(keyNodeEntryOrRaw: BTNRep<K, V, NODE> | R, ignoreCount?: boolean): BinaryTreeDeleteResult<NODE>[];
141
141
  /**
142
142
  * Time Complexity: O(1)
143
143
  * Space Complexity: O(1)
@@ -174,15 +174,15 @@ export declare class TreeMultiMap<K = any, V = any, R = BTNEntry<K, V>, NODE ext
174
174
  *
175
175
  * The `_swapProperties` function swaps the properties (key, value, count, color) between two nodes
176
176
  * in a binary search tree.
177
- * @param {R | BSTNKeyOrNode<K, NODE>} srcNode - The `srcNode` parameter represents the source node
177
+ * @param {R | BSTNOptKeyOrNode<K, NODE>} srcNode - The `srcNode` parameter represents the source node
178
178
  * that will be swapped with the `destNode`. It can be either an instance of the `R` class or an
179
- * instance of the `BSTNKeyOrNode<K, NODE>` class.
180
- * @param {R | BSTNKeyOrNode<K, NODE>} destNode - The `destNode` parameter represents the destination
179
+ * instance of the `BSTNOptKeyOrNode<K, NODE>` class.
180
+ * @param {R | BSTNOptKeyOrNode<K, NODE>} destNode - The `destNode` parameter represents the destination
181
181
  * node where the properties will be swapped with the source node.
182
182
  * @returns The method is returning the `destNode` after swapping its properties with the `srcNode`.
183
183
  * If either `srcNode` or `destNode` is undefined, it returns undefined.
184
184
  */
185
- protected _swapProperties(srcNode: R | BSTNKeyOrNode<K, NODE>, destNode: R | BSTNKeyOrNode<K, NODE>): NODE | undefined;
185
+ protected _swapProperties(srcNode: R | BSTNOptKeyOrNode<K, NODE>, destNode: R | BSTNOptKeyOrNode<K, NODE>): NODE | undefined;
186
186
  /**
187
187
  * Time Complexity: O(1)
188
188
  * Space Complexity: O(1)
@@ -36,17 +36,17 @@ export class TreeMultiMapNode extends RedBlackTreeNode {
36
36
  export class TreeMultiMap extends RedBlackTree {
37
37
  /**
38
38
  * The constructor function initializes a TreeMultiMap object with optional initial data.
39
- * @param keysOrNodesOrEntriesOrRaws - The parameter `keysOrNodesOrEntriesOrRaws` is an
39
+ * @param keysNodesEntriesOrRaws - The parameter `keysNodesEntriesOrRaws` is an
40
40
  * iterable that can contain keys, nodes, entries, or raw elements. It is used to initialize the
41
41
  * TreeMultiMap with initial data.
42
42
  * @param [options] - The `options` parameter is an optional object that can be used to customize the
43
43
  * behavior of the `TreeMultiMap` constructor. It can include properties such as `compareKeys` and
44
44
  * `compareValues`, which are functions used to compare keys and values respectively.
45
45
  */
46
- constructor(keysOrNodesOrEntriesOrRaws = [], options) {
46
+ constructor(keysNodesEntriesOrRaws = [], options) {
47
47
  super([], options);
48
- if (keysOrNodesOrEntriesOrRaws)
49
- this.addMany(keysOrNodesOrEntriesOrRaws);
48
+ if (keysNodesEntriesOrRaws)
49
+ this.addMany(keysNodesEntriesOrRaws);
50
50
  }
51
51
  _count = 0;
52
52
  // TODO the _count is not accurate after nodes count modified
@@ -84,7 +84,7 @@ export class TreeMultiMap extends RedBlackTree {
84
84
  * @returns A new instance of the TreeMultiMapNode class, casted as NODE.
85
85
  */
86
86
  createNode(key, value, color = 'BLACK', count) {
87
- return new TreeMultiMapNode(key, value, count, color);
87
+ return new TreeMultiMapNode(key, this._isMapMode ? undefined : value, count, color);
88
88
  }
89
89
  /**
90
90
  * The function creates a new instance of a TreeMultiMap with the specified options and returns it.
@@ -97,16 +97,17 @@ export class TreeMultiMap extends RedBlackTree {
97
97
  createTree(options) {
98
98
  return new TreeMultiMap([], {
99
99
  iterationType: this.iterationType,
100
+ isMapMode: this._isMapMode,
100
101
  comparator: this._comparator,
101
102
  toEntryFn: this._toEntryFn,
102
103
  ...options
103
104
  });
104
105
  }
105
106
  /**
106
- * The function `keyValueOrEntryOrRawElementToNode` takes in a key, value, and count and returns a
107
+ * The function `keyValueNodeEntryRawToNodeAndValue` takes in a key, value, and count and returns a
107
108
  * node based on the input.
108
- * @param {BTNKeyOrNodeOrEntry<K, V, NODE> | R} keyOrNodeOrEntryOrRaw - The parameter
109
- * `keyOrNodeOrEntryOrRaw` can be of type `R` or `BTNKeyOrNodeOrEntry<K, V, NODE>`.
109
+ * @param {BTNRep<K, V, NODE> | R} keyNodeEntryOrRaw - The parameter
110
+ * `keyNodeEntryOrRaw` can be of type `R` or `BTNRep<K, V, NODE>`.
110
111
  * @param {V} [value] - The `value` parameter is an optional value that represents the value
111
112
  * associated with the key in the node. It is used when creating a new node or updating the value of
112
113
  * an existing node.
@@ -114,36 +115,38 @@ export class TreeMultiMap extends RedBlackTree {
114
115
  * times the key-value pair should be added to the data structure. If not provided, it defaults to 1.
115
116
  * @returns either a NODE object or undefined.
116
117
  */
117
- keyValueOrEntryOrRawElementToNode(keyOrNodeOrEntryOrRaw, value, count = 1) {
118
- if (keyOrNodeOrEntryOrRaw === undefined || keyOrNodeOrEntryOrRaw === null)
119
- return;
120
- if (this.isNode(keyOrNodeOrEntryOrRaw))
121
- return keyOrNodeOrEntryOrRaw;
122
- if (this.isEntry(keyOrNodeOrEntryOrRaw)) {
123
- const [key, entryValue] = keyOrNodeOrEntryOrRaw;
118
+ keyValueNodeEntryRawToNodeAndValue(keyNodeEntryOrRaw, value, count = 1) {
119
+ if (keyNodeEntryOrRaw === undefined || keyNodeEntryOrRaw === null)
120
+ return [undefined, undefined];
121
+ if (this.isNode(keyNodeEntryOrRaw))
122
+ return [keyNodeEntryOrRaw, value];
123
+ if (this.isEntry(keyNodeEntryOrRaw)) {
124
+ const [key, entryValue] = keyNodeEntryOrRaw;
124
125
  if (key === undefined || key === null)
125
- return;
126
+ return [undefined, undefined];
127
+ const finalValue = value ?? entryValue;
126
128
  if (this.isKey(key))
127
- return this.createNode(key, value ?? entryValue, 'BLACK', count);
129
+ return [this.createNode(key, finalValue, 'BLACK', count), finalValue];
128
130
  }
129
131
  if (this._toEntryFn) {
130
- const [key, entryValue] = this._toEntryFn(keyOrNodeOrEntryOrRaw);
132
+ const [key, entryValue] = this._toEntryFn(keyNodeEntryOrRaw);
133
+ const finalValue = value ?? entryValue;
131
134
  if (this.isKey(key))
132
- return this.createNode(key, value ?? entryValue, 'BLACK', count);
135
+ return [this.createNode(key, finalValue, 'BLACK', count), finalValue];
133
136
  }
134
- if (this.isKey(keyOrNodeOrEntryOrRaw))
135
- return this.createNode(keyOrNodeOrEntryOrRaw, value, 'BLACK', count);
136
- return;
137
+ if (this.isKey(keyNodeEntryOrRaw))
138
+ return [this.createNode(keyNodeEntryOrRaw, value, 'BLACK', count), value];
139
+ return [undefined, undefined];
137
140
  }
138
141
  /**
139
142
  * The function checks if the input is an instance of the TreeMultiMapNode class.
140
- * @param {BTNKeyOrNodeOrEntry<K, V, NODE> | R} keyOrNodeOrEntryOrRaw - The parameter
141
- * `keyOrNodeOrEntryOrRaw` can be of type `R` or `BTNKeyOrNodeOrEntry<K, V, NODE>`.
142
- * @returns a boolean value indicating whether the input parameter `keyOrNodeOrEntryOrRaw` is
143
+ * @param {BTNRep<K, V, NODE> | R} keyNodeEntryOrRaw - The parameter
144
+ * `keyNodeEntryOrRaw` can be of type `R` or `BTNRep<K, V, NODE>`.
145
+ * @returns a boolean value indicating whether the input parameter `keyNodeEntryOrRaw` is
143
146
  * an instance of the `TreeMultiMapNode` class.
144
147
  */
145
- isNode(keyOrNodeOrEntryOrRaw) {
146
- return keyOrNodeOrEntryOrRaw instanceof TreeMultiMapNode;
148
+ isNode(keyNodeEntryOrRaw) {
149
+ return keyNodeEntryOrRaw instanceof TreeMultiMapNode;
147
150
  }
148
151
  /**
149
152
  * Time Complexity: O(log n)
@@ -151,8 +154,8 @@ export class TreeMultiMap extends RedBlackTree {
151
154
  *
152
155
  * The function overrides the add method of a class and adds a new node to a data structure, updating
153
156
  * the count and returning a boolean indicating success.
154
- * @param {BTNKeyOrNodeOrEntry<K, V, NODE> | R} keyOrNodeOrEntryOrRaw - The
155
- * `keyOrNodeOrEntryOrRaw` parameter can accept one of the following types:
157
+ * @param {BTNRep<K, V, NODE> | R} keyNodeEntryOrRaw - The
158
+ * `keyNodeEntryOrRaw` parameter can accept one of the following types:
156
159
  * @param {V} [value] - The `value` parameter represents the value associated with the key in the
157
160
  * data structure. It is an optional parameter, so it can be omitted if not needed.
158
161
  * @param [count=1] - The `count` parameter represents the number of times the key-value pair should
@@ -161,10 +164,10 @@ export class TreeMultiMap extends RedBlackTree {
161
164
  * @returns The method is returning a boolean value. It returns true if the addition of the new node
162
165
  * was successful, and false otherwise.
163
166
  */
164
- add(keyOrNodeOrEntryOrRaw, value, count = 1) {
165
- const newNode = this.keyValueOrEntryOrRawElementToNode(keyOrNodeOrEntryOrRaw, value, count);
167
+ add(keyNodeEntryOrRaw, value, count = 1) {
168
+ const [newNode, newValue] = this.keyValueNodeEntryRawToNodeAndValue(keyNodeEntryOrRaw, value, count);
166
169
  const orgCount = newNode?.count || 0;
167
- const isSuccessAdded = super.add(newNode);
170
+ const isSuccessAdded = super.add(newNode, newValue);
168
171
  if (isSuccessAdded) {
169
172
  this._count += orgCount;
170
173
  return true;
@@ -179,7 +182,7 @@ export class TreeMultiMap extends RedBlackTree {
179
182
  *
180
183
  * The function `delete` in TypeScript overrides the deletion operation in a binary tree data
181
184
  * structure, handling cases where nodes have children and maintaining balance in the tree.
182
- * @param {BTNKeyOrNodeOrEntry<K, V, NODE> | R} keyOrNodeOrEntryOrRaw - The `predicate`
185
+ * @param {BTNRep<K, V, NODE> | R} keyNodeEntryOrRaw - The `predicate`
183
186
  * parameter in the `delete` method is used to specify the condition or key based on which a node
184
187
  * should be deleted from the binary tree. It can be a key, a node, or an entry.
185
188
  * @param [ignoreCount=false] - The `ignoreCount` parameter in the `override delete` method is a
@@ -188,17 +191,15 @@ export class TreeMultiMap extends RedBlackTree {
188
191
  * `ignoreCount` is `false
189
192
  * @returns The `override delete` method returns an array of `BinaryTreeDeleteResult<NODE>` objects.
190
193
  */
191
- delete(keyOrNodeOrEntryOrRaw, ignoreCount = false) {
192
- if (keyOrNodeOrEntryOrRaw === null)
194
+ delete(keyNodeEntryOrRaw, ignoreCount = false) {
195
+ if (keyNodeEntryOrRaw === null)
193
196
  return [];
194
197
  const results = [];
195
198
  let nodeToDelete;
196
- if (this._isPredicated(keyOrNodeOrEntryOrRaw))
197
- nodeToDelete = this.getNode(keyOrNodeOrEntryOrRaw);
199
+ if (this._isPredicate(keyNodeEntryOrRaw))
200
+ nodeToDelete = this.getNode(keyNodeEntryOrRaw);
198
201
  else
199
- nodeToDelete = this.isRealNode(keyOrNodeOrEntryOrRaw)
200
- ? keyOrNodeOrEntryOrRaw
201
- : this.getNode(keyOrNodeOrEntryOrRaw);
202
+ nodeToDelete = this.isRealNode(keyNodeEntryOrRaw) ? keyNodeEntryOrRaw : this.getNode(keyNodeEntryOrRaw);
202
203
  if (!nodeToDelete) {
203
204
  return results;
204
205
  }
@@ -316,7 +317,10 @@ export class TreeMultiMap extends RedBlackTree {
316
317
  return;
317
318
  const m = l + Math.floor((r - l) / 2);
318
319
  const midNode = sorted[m];
319
- this.add(midNode.key, midNode.value, midNode.count);
320
+ if (this._isMapMode)
321
+ this.add(midNode.key, undefined, midNode.count);
322
+ else
323
+ this.add(midNode.key, midNode.value, midNode.count);
320
324
  buildBalanceBST(l, m - 1);
321
325
  buildBalanceBST(m + 1, r);
322
326
  };
@@ -332,7 +336,10 @@ export class TreeMultiMap extends RedBlackTree {
332
336
  if (l <= r) {
333
337
  const m = l + Math.floor((r - l) / 2);
334
338
  const midNode = sorted[m];
335
- this.add(midNode.key, midNode.value, midNode.count);
339
+ if (this._isMapMode)
340
+ this.add(midNode.key, undefined, midNode.count);
341
+ else
342
+ this.add(midNode.key, midNode.value, midNode.count);
336
343
  stack.push([m + 1, r]);
337
344
  stack.push([l, m - 1]);
338
345
  }
@@ -350,7 +357,9 @@ export class TreeMultiMap extends RedBlackTree {
350
357
  */
351
358
  clone() {
352
359
  const cloned = this.createTree();
353
- this.bfs(node => cloned.add(node.key, node.value, node.count));
360
+ this.bfs(node => cloned.add(node.key, undefined, node.count));
361
+ if (this._isMapMode)
362
+ cloned._store = this._store;
354
363
  return cloned;
355
364
  }
356
365
  /**
@@ -359,10 +368,10 @@ export class TreeMultiMap extends RedBlackTree {
359
368
  *
360
369
  * The `_swapProperties` function swaps the properties (key, value, count, color) between two nodes
361
370
  * in a binary search tree.
362
- * @param {R | BSTNKeyOrNode<K, NODE>} srcNode - The `srcNode` parameter represents the source node
371
+ * @param {R | BSTNOptKeyOrNode<K, NODE>} srcNode - The `srcNode` parameter represents the source node
363
372
  * that will be swapped with the `destNode`. It can be either an instance of the `R` class or an
364
- * instance of the `BSTNKeyOrNode<K, NODE>` class.
365
- * @param {R | BSTNKeyOrNode<K, NODE>} destNode - The `destNode` parameter represents the destination
373
+ * instance of the `BSTNOptKeyOrNode<K, NODE>` class.
374
+ * @param {R | BSTNOptKeyOrNode<K, NODE>} destNode - The `destNode` parameter represents the destination
366
375
  * node where the properties will be swapped with the source node.
367
376
  * @returns The method is returning the `destNode` after swapping its properties with the `srcNode`.
368
377
  * If either `srcNode` or `destNode` is undefined, it returns undefined.
@@ -376,11 +385,13 @@ export class TreeMultiMap extends RedBlackTree {
376
385
  if (tempNode) {
377
386
  tempNode.color = color;
378
387
  destNode.key = srcNode.key;
379
- destNode.value = srcNode.value;
388
+ if (!this._isMapMode)
389
+ destNode.value = srcNode.value;
380
390
  destNode.count = srcNode.count;
381
391
  destNode.color = srcNode.color;
382
392
  srcNode.key = tempNode.key;
383
- srcNode.value = tempNode.value;
393
+ if (!this._isMapMode)
394
+ srcNode.value = tempNode.value;
384
395
  srcNode.count = tempNode.count;
385
396
  srcNode.color = tempNode.color;
386
397
  }
@@ -238,9 +238,9 @@ export class Trie extends IterableElementBase {
238
238
  *
239
239
  */
240
240
  getHeight() {
241
- const beginRoot = this.root;
241
+ const startNode = this.root;
242
242
  let maxDepth = 0;
243
- if (beginRoot) {
243
+ if (startNode) {
244
244
  const bfs = (node, level) => {
245
245
  if (level > maxDepth) {
246
246
  maxDepth = level;
@@ -252,7 +252,7 @@ export class Trie extends IterableElementBase {
252
252
  }
253
253
  }
254
254
  };
255
- bfs(beginRoot, 0);
255
+ bfs(startNode, 0);
256
256
  }
257
257
  return maxDepth;
258
258
  }
@@ -1,9 +1,9 @@
1
1
  import { BinaryTree, BinaryTreeNode } from '../data-structures';
2
- import type { BinaryTreeDeleteResult, BinaryTreeNested, BinaryTreeNodeNested, BinaryTreeOptions, BTNKeyOrNodeOrEntry, BTNPredicate } from '../types';
3
- export interface IBinaryTree<K = any, V = any, R = [K, V], NODE extends BinaryTreeNode<K, V, NODE> = BinaryTreeNodeNested<K, V>, TREE extends BinaryTree<K, V, R, NODE, TREE> = BinaryTreeNested<K, V, R, NODE>> {
2
+ import type { BinaryTreeDeleteResult, BinaryTreeNested, BinaryTreeNodeNested, BinaryTreeOptions, BTNRep, NodePredicate } from '../types';
3
+ export interface IBinaryTree<K = any, V = any, R = object, NODE extends BinaryTreeNode<K, V, NODE> = BinaryTreeNodeNested<K, V>, TREE extends BinaryTree<K, V, R, NODE, TREE> = BinaryTreeNested<K, V, R, NODE>> {
4
4
  createNode(key: K, value?: NODE['value']): NODE;
5
5
  createTree(options?: Partial<BinaryTreeOptions<K, V, R>>): TREE;
6
- add(keyOrNodeOrEntryOrRawElement: BTNKeyOrNodeOrEntry<K, V, NODE>, value?: V, count?: number): boolean;
7
- addMany(nodes: Iterable<BTNKeyOrNodeOrEntry<K, V, NODE>>, values?: Iterable<V | undefined>): boolean[];
8
- delete(predicate: R | BTNKeyOrNodeOrEntry<K, V, NODE> | BTNPredicate<NODE>): BinaryTreeDeleteResult<NODE>[];
6
+ add(keyOrNodeOrEntryOrRawElement: BTNRep<K, V, NODE>, value?: V, count?: number): boolean;
7
+ addMany(nodes: Iterable<BTNRep<K, V, NODE>>, values?: Iterable<V | undefined>): boolean[];
8
+ delete(predicate: R | BTNRep<K, V, NODE> | NodePredicate<NODE>): BinaryTreeDeleteResult<NODE>[];
9
9
  }
@@ -3,29 +3,29 @@ import { IterationType, OptValue } from '../../common';
3
3
  import { DFSOperation } from '../../../constants';
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
5
  export type BinaryTreeNested<K, 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>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;
6
+ export type ToEntryFn<K, V, R> = (rawElement: R) => BTNEntry<K, V>;
6
7
  export type BinaryTreeOptions<K, V, R> = {
7
8
  iterationType?: IterationType;
8
- toEntryFn?: (rawElement: R) => BTNEntry<K, V>;
9
+ toEntryFn?: ToEntryFn<K, V, R>;
10
+ isMapMode?: boolean;
9
11
  };
10
12
  export type BinaryTreePrintOptions = {
11
13
  isShowUndefined?: boolean;
12
14
  isShowNull?: boolean;
13
15
  isShowRedBlackNIL?: boolean;
14
16
  };
15
- export type OptBTNOrNull<NODE> = NODE | null | undefined;
16
- export type OptBTNKeyOrNull<K> = K | null | undefined;
17
- export type BTNEntry<K, V> = [OptBTNKeyOrNull<K>, OptValue<V>];
18
- export type BTNKeyOrNode<K, NODE> = OptBTNKeyOrNull<K> | NODE;
19
- export type BTNKeyOrNodeOrEntry<K, V, NODE> = BTNEntry<K, V> | BTNKeyOrNode<K, NODE>;
20
- export type BTNPureKeyOrNode<K, NODE> = K | NODE;
21
- export type BTNPureKeyOrNodeOrEntry<K, V, NODE> = [K, OptValue<V>] | BTNPureKeyOrNode<K, NODE>;
17
+ export type OptNodeOrNull<NODE> = NODE | null | undefined;
18
+ export type BTNOptKeyOrNull<K> = K | null | undefined;
19
+ export type BTNEntry<K, V> = [BTNOptKeyOrNull<K>, OptValue<V>];
20
+ export type BTNOptKeyNodeOrNull<K, NODE> = BTNOptKeyOrNull<K> | NODE;
21
+ export type BTNRep<K, V, NODE> = BTNEntry<K, V> | BTNOptKeyNodeOrNull<K, NODE>;
22
22
  export type BinaryTreeDeleteResult<NODE> = {
23
- deleted: OptBTNOrNull<NODE>;
24
- needBalanced: OptBTNOrNull<NODE>;
23
+ deleted: OptNodeOrNull<NODE>;
24
+ needBalanced: OptNodeOrNull<NODE>;
25
25
  };
26
- export type BTNCallback<NODE, D = any> = (node: NODE) => D;
27
- export type BTNPredicate<NODE> = (node: NODE) => boolean;
26
+ export type NodeCallback<NODE, D = any> = (node: NODE) => D;
27
+ export type NodePredicate<NODE> = (node: NODE) => boolean;
28
28
  export type DFSStackItem<NODE> = {
29
29
  opt: DFSOperation;
30
- node: OptBTNOrNull<NODE>;
30
+ node: OptNodeOrNull<NODE>;
31
31
  };
@@ -6,6 +6,6 @@ export type BSTNested<K, V, R, NODE extends BSTNode<K, V, NODE>> = BST<K, V, R,
6
6
  export type BSTOptions<K, V, R> = BinaryTreeOptions<K, V, R> & {
7
7
  comparator?: Comparator<K>;
8
8
  };
9
- export type OptBSTNKey<K> = K | undefined;
10
- export type OptBSTN<NODE> = NODE | undefined;
11
- export type BSTNKeyOrNode<K, NODE> = OptBSTNKey<K> | NODE;
9
+ export type BSTNOptKey<K> = K | undefined;
10
+ export type OptNode<NODE> = NODE | undefined;
11
+ export type BSTNOptKeyOrNode<K, NODE> = BSTNOptKey<K> | NODE;