@@ -9,15 +9,15 @@ import type {
9
9
AVLTreeCounterOptions ,
10
10
BinaryTreeDeleteResult ,
11
11
BSTNOptKeyOrNode ,
12
- BTNRep ,
13
12
EntryCallback ,
14
- IterationType ,
15
- OptNodeOrNull
13
+ IterationType
16
14
} from '../../types' ;
17
15
import { IBinaryTree } from '../../interfaces' ;
18
16
import { AVLTree , AVLTreeNode } from './avl-tree' ;
19
17
20
18
export class AVLTreeCounterNode < K = any , V = any > extends AVLTreeNode < K , V > {
19
+ override parent ?: AVLTreeCounterNode < K , V > = undefined ;
20
+
21
21
/**
22
22
* The constructor function initializes a BinaryTreeNode object with a key, value, and count.
23
23
* @param {K } key - The `key` parameter is of type `K` and represents the unique identifier
@@ -33,28 +33,26 @@ export class AVLTreeCounterNode<K = any, V = any> extends AVLTreeNode<K, V> {
33
33
this . count = count ;
34
34
}
35
35
36
- override parent ?: AVLTreeCounterNode < K , V > = undefined ;
37
-
38
- override _left ?: OptNodeOrNull < AVLTreeCounterNode < K , V > > = undefined ;
36
+ override _left ?: AVLTreeCounterNode < K , V > | null | undefined = undefined ;
39
37
40
- override get left ( ) : OptNodeOrNull < AVLTreeCounterNode < K , V > > {
38
+ override get left ( ) : AVLTreeCounterNode < K , V > | null | undefined {
41
39
return this . _left ;
42
40
}
43
41
44
- override set left ( v : OptNodeOrNull < AVLTreeCounterNode < K , V > > ) {
42
+ override set left ( v : AVLTreeCounterNode < K , V > | null | undefined ) {
45
43
if ( v ) {
46
44
v . parent = this ;
47
45
}
48
46
this . _left = v ;
49
47
}
50
48
51
- override _right ?: OptNodeOrNull < AVLTreeCounterNode < K , V > > = undefined ;
49
+ override _right ?: AVLTreeCounterNode < K , V > | null | undefined = undefined ;
52
50
53
- override get right ( ) : OptNodeOrNull < AVLTreeCounterNode < K , V > > {
51
+ override get right ( ) : AVLTreeCounterNode < K , V > | null | undefined {
54
52
return this . _right ;
55
53
}
56
54
57
- override set right ( v : OptNodeOrNull < AVLTreeCounterNode < K , V > > ) {
55
+ override set right ( v : AVLTreeCounterNode < K , V > | null | undefined ) {
58
56
if ( v ) {
59
57
v . parent = this ;
60
58
}
@@ -78,7 +76,9 @@ export class AVLTreeCounter<K = any, V = any, R = object, MK = any, MV = any, MR
78
76
* `compareValues` functions to define custom comparison logic for keys and values, respectively.
79
77
*/
80
78
constructor (
81
- keysNodesEntriesOrRaws : Iterable < BTNRep < K , V , AVLTreeCounterNode < K , V > > | R > = [ ] ,
79
+ keysNodesEntriesOrRaws : Iterable <
80
+ K | AVLTreeCounterNode < K , V > | [ K | null | undefined , V | undefined ] | null | undefined | R
81
+ > = [ ] ,
82
82
options ?: AVLTreeCounterOptions < K , V , R >
83
83
) {
84
84
super ( [ ] , options ) ;
@@ -145,12 +145,14 @@ export class AVLTreeCounter<K = any, V = any, R = object, MK = any, MV = any, MR
145
145
146
146
/**
147
147
* The function checks if the input is an instance of AVLTreeCounterNode.
148
- * @param {BTNRep<K, V, AVLTreeCounterNode<K, V>> } keyNodeOrEntry - The parameter
149
- * `keyNodeOrEntry` can be of type `R` or `BTNRep<K, V, AVLTreeCounterNode<K, V>> `.
148
+ * @param {K | AVLTreeCounterNode<K, V> | [K | null | undefined, V | undefined] | null | undefined } keyNodeOrEntry - The parameter
149
+ * `keyNodeOrEntry` can be of type `R` or `K | AVLTreeCounterNode<K, V> | [K | null | undefined, V | undefined] | null | undefined `.
150
150
* @returns a boolean value indicating whether the input parameter `keyNodeOrEntry` is
151
151
* an instance of the `AVLTreeCounterNode` class.
152
152
*/
153
- override isNode ( keyNodeOrEntry : BTNRep < K , V , AVLTreeCounterNode < K , V > > ) : keyNodeOrEntry is AVLTreeCounterNode < K , V > {
153
+ override isNode (
154
+ keyNodeOrEntry : K | AVLTreeCounterNode < K , V > | [ K | null | undefined , V | undefined ] | null | undefined
155
+ ) : keyNodeOrEntry is AVLTreeCounterNode < K , V > {
154
156
return keyNodeOrEntry instanceof AVLTreeCounterNode ;
155
157
}
156
158
@@ -160,9 +162,9 @@ export class AVLTreeCounter<K = any, V = any, R = object, MK = any, MV = any, MR
160
162
*
161
163
* The function overrides the add method of a TypeScript class to add a new node to a data structure
162
164
* and update the count.
163
- * @param {BTNRep<K, V, AVLTreeCounterNode<K, V>> } keyNodeOrEntry - The
165
+ * @param {K | AVLTreeCounterNode<K, V> | [K | null | undefined, V | undefined] | null | undefined } keyNodeOrEntry - The
164
166
* `keyNodeOrEntry` parameter can accept a value of type `R`, which can be any type. It
165
- * can also accept a value of type `BTNRep<K, V, AVLTreeCounterNode<K, V>> `, which represents a key, node,
167
+ * can also accept a value of type `K | AVLTreeCounterNode<K, V> | [K | null | undefined, V | undefined] | null | undefined `, which represents a key, node,
166
168
* entry, or raw element
167
169
* @param {V } [value] - The `value` parameter represents the value associated with the key in the
168
170
* data structure. It is an optional parameter, so it can be omitted if not needed.
@@ -171,7 +173,11 @@ export class AVLTreeCounter<K = any, V = any, R = object, MK = any, MV = any, MR
171
173
* be added once. However, you can specify a different value for `count` if you want to add
172
174
* @returns a boolean value.
173
175
*/
174
- override add ( keyNodeOrEntry : BTNRep < K , V , AVLTreeCounterNode < K , V > > , value ?: V , count = 1 ) : boolean {
176
+ override add (
177
+ keyNodeOrEntry : K | AVLTreeCounterNode < K , V > | [ K | null | undefined , V | undefined ] | null | undefined ,
178
+ value ?: V ,
179
+ count = 1
180
+ ) : boolean {
175
181
const [ newNode , newValue ] = this . _keyValueNodeOrEntryToNodeAndValue ( keyNodeOrEntry , value , count ) ;
176
182
if ( newNode === undefined ) return false ;
177
183
@@ -189,7 +195,7 @@ export class AVLTreeCounter<K = any, V = any, R = object, MK = any, MV = any, MR
189
195
*
190
196
* The function overrides the delete method in a binary tree data structure, handling deletion of
191
197
* nodes and maintaining balance in the tree.
192
- * @param {BTNRep<K, V, AVLTreeCounterNode<K, V>> } keyNodeOrEntry - The `predicate`
198
+ * @param {K | AVLTreeCounterNode<K, V> | [K | null | undefined, V | undefined] | null | undefined } keyNodeOrEntry - The `predicate`
193
199
* parameter in the `delete` method is used to specify the condition for deleting a node from the
194
200
* binary tree. It can be a key, node, or entry that determines which
195
201
* node(s) should be deleted.
@@ -203,7 +209,7 @@ export class AVLTreeCounter<K = any, V = any, R = object, MK = any, MV = any, MR
203
209
* deleted node and whether balancing is needed in the tree.
204
210
*/
205
211
override delete (
206
- keyNodeOrEntry : BTNRep < K , V , AVLTreeCounterNode < K , V > > ,
212
+ keyNodeOrEntry : K | AVLTreeCounterNode < K , V > | [ K | null | undefined , V | undefined ] | null | undefined ,
207
213
ignoreCount = false
208
214
) : BinaryTreeDeleteResult < AVLTreeCounterNode < K , V > > [ ] {
209
215
const deletedResult : BinaryTreeDeleteResult < AVLTreeCounterNode < K , V > > [ ] = [ ] ;
@@ -276,6 +282,7 @@ export class AVLTreeCounter<K = any, V = any, R = object, MK = any, MV = any, MR
276
282
/**
277
283
* Time Complexity: O(n log n)
278
284
* Space Complexity: O(log n)
285
+ *
279
286
* The `perfectlyBalance` function takes a sorted array of nodes and builds a balanced binary search
280
287
* tree using either a recursive or iterative approach.
281
288
* @param {IterationType } iterationType - The `iterationType` parameter is an optional parameter that
@@ -374,8 +381,8 @@ export class AVLTreeCounter<K = any, V = any, R = object, MK = any, MV = any, MR
374
381
/**
375
382
* The function `keyValueNodeEntryRawToNodeAndValue` converts a key, value, entry, or raw element into
376
383
* a node object.
377
- * @param {BTNRep<K, V, AVLTreeCounterNode<K, V>> } keyNodeOrEntry - The
378
- * `keyNodeOrEntry` parameter can be of type `R` or `BTNRep<K, V, AVLTreeCounterNode<K, V>> `.
384
+ * @param {K | AVLTreeCounterNode<K, V> | [K | null | undefined, V | undefined] | null | undefined } keyNodeOrEntry - The
385
+ * `keyNodeOrEntry` parameter can be of type `R` or `K | AVLTreeCounterNode<K, V> | [K | null | undefined, V | undefined] | null | undefined `.
379
386
* @param {V } [value] - The `value` parameter is an optional value that can be passed to the
380
387
* `override` function. It represents the value associated with the key in the data structure. If no
381
388
* value is provided, it will default to `undefined`.
@@ -384,7 +391,7 @@ export class AVLTreeCounter<K = any, V = any, R = object, MK = any, MV = any, MR
384
391
* @returns either a AVLTreeCounterNode<K, V> object or undefined.
385
392
*/
386
393
protected override _keyValueNodeOrEntryToNodeAndValue (
387
- keyNodeOrEntry : BTNRep < K , V , AVLTreeCounterNode < K , V > > ,
394
+ keyNodeOrEntry : K | AVLTreeCounterNode < K , V > | [ K | null | undefined , V | undefined ] | null | undefined ,
388
395
value ?: V ,
389
396
count = 1
390
397
) : [ AVLTreeCounterNode < K , V > | undefined , V | undefined ] {
0 commit comments