graph-typed 1.46.7 → 1.47.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.
- package/dist/data-structures/binary-tree/avl-tree.d.ts +4 -2
- package/dist/data-structures/binary-tree/avl-tree.js +10 -0
- package/dist/data-structures/binary-tree/binary-tree.d.ts +51 -13
- package/dist/data-structures/binary-tree/binary-tree.js +153 -55
- package/dist/data-structures/binary-tree/bst.d.ts +10 -9
- package/dist/data-structures/binary-tree/bst.js +16 -14
- package/dist/data-structures/binary-tree/rb-tree.d.ts +7 -5
- package/dist/data-structures/binary-tree/rb-tree.js +32 -23
- package/dist/data-structures/binary-tree/tree-multimap.d.ts +5 -3
- package/dist/data-structures/binary-tree/tree-multimap.js +11 -2
- package/dist/interfaces/binary-tree.d.ts +3 -3
- package/dist/types/common.d.ts +5 -4
- package/dist/types/data-structures/binary-tree/avl-tree.d.ts +2 -1
- package/dist/types/data-structures/binary-tree/binary-tree.d.ts +3 -1
- package/dist/types/data-structures/binary-tree/binary-tree.js +0 -6
- package/dist/types/data-structures/binary-tree/bst.d.ts +2 -1
- package/dist/types/data-structures/binary-tree/rb-tree.d.ts +2 -1
- package/dist/types/data-structures/binary-tree/tree-multimap.d.ts +2 -1
- package/package.json +2 -2
- package/src/data-structures/binary-tree/avl-tree.ts +17 -5
- package/src/data-structures/binary-tree/binary-tree.ts +175 -62
- package/src/data-structures/binary-tree/bst.ts +23 -19
- package/src/data-structures/binary-tree/rb-tree.ts +38 -27
- package/src/data-structures/binary-tree/tree-multimap.ts +19 -6
- package/src/interfaces/binary-tree.ts +3 -3
- package/src/types/common.ts +2 -5
- package/src/types/data-structures/binary-tree/avl-tree.ts +5 -1
- package/src/types/data-structures/binary-tree/binary-tree.ts +5 -7
- package/src/types/data-structures/binary-tree/bst.ts +3 -1
- package/src/types/data-structures/binary-tree/rb-tree.ts +3 -1
- package/src/types/data-structures/binary-tree/tree-multimap.ts +3 -1
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
IterationType,
|
|
14
14
|
RBTNColor,
|
|
15
15
|
RBTreeOptions,
|
|
16
|
+
RedBlackTreeNested,
|
|
16
17
|
RedBlackTreeNodeNested
|
|
17
18
|
} from '../../types';
|
|
18
19
|
import { BST, BSTNode } from './bst';
|
|
@@ -34,14 +35,15 @@ export class RedBlackTreeNode<V = any, N extends RedBlackTreeNode<V, N> = RedBla
|
|
|
34
35
|
/**
|
|
35
36
|
* 1. Each node is either red or black.
|
|
36
37
|
* 2. The root node is always black.
|
|
37
|
-
* 3. Leaf nodes are typically
|
|
38
|
+
* 3. Leaf nodes are typically Sentinel nodes and are considered black.
|
|
38
39
|
* 4. Red nodes must have black children.
|
|
39
40
|
* 5. Black balance: Every path from any node to each of its leaf nodes contains the same number of black nodes.
|
|
40
41
|
*/
|
|
41
|
-
export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTreeNode<V, RedBlackTreeNodeNested<V>>>
|
|
42
|
-
extends BST<V, N>
|
|
43
|
-
implements IBinaryTree<V, N> {
|
|
44
|
-
|
|
42
|
+
export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTreeNode<V, RedBlackTreeNodeNested<V>>, TREE extends RedBlackTree<V, N, TREE> = RedBlackTree<V, N, RedBlackTreeNested<V, N>>>
|
|
43
|
+
extends BST<V, N, TREE>
|
|
44
|
+
implements IBinaryTree<V, N, TREE> {
|
|
45
|
+
Sentinel: N = new RedBlackTreeNode<V>(NaN) as unknown as N;
|
|
46
|
+
override options: RBTreeOptions;
|
|
45
47
|
|
|
46
48
|
/**
|
|
47
49
|
* The constructor function initializes a Red-Black Tree with an optional set of options.
|
|
@@ -50,7 +52,12 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
|
|
|
50
52
|
*/
|
|
51
53
|
constructor(options?: RBTreeOptions) {
|
|
52
54
|
super(options);
|
|
53
|
-
|
|
55
|
+
if (options) {
|
|
56
|
+
this.options = { iterationType: IterationType.ITERATIVE, comparator: (a, b) => a - b, ...options }
|
|
57
|
+
} else {
|
|
58
|
+
this.options = { iterationType: IterationType.ITERATIVE, comparator: (a, b) => a - b };
|
|
59
|
+
}
|
|
60
|
+
this._root = this.Sentinel;
|
|
54
61
|
}
|
|
55
62
|
|
|
56
63
|
protected _root: N;
|
|
@@ -65,6 +72,14 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
|
|
|
65
72
|
return this._size;
|
|
66
73
|
}
|
|
67
74
|
|
|
75
|
+
override createNode(key: BTNKey, value?: V, color: RBTNColor = RBTNColor.BLACK): N {
|
|
76
|
+
return new RedBlackTreeNode<V, N>(key, value, color) as N;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
override createTree(options?: RBTreeOptions): TREE {
|
|
80
|
+
return new RedBlackTree<V, N, TREE>({ ...this.options, ...options }) as TREE;
|
|
81
|
+
}
|
|
82
|
+
|
|
68
83
|
/**
|
|
69
84
|
* Time Complexity: O(log n) on average (where n is the number of nodes in the tree)
|
|
70
85
|
* Space Complexity: O(1)
|
|
@@ -95,13 +110,13 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
|
|
|
95
110
|
return;
|
|
96
111
|
}
|
|
97
112
|
|
|
98
|
-
node.left = this.
|
|
99
|
-
node.right = this.
|
|
113
|
+
node.left = this.Sentinel;
|
|
114
|
+
node.right = this.Sentinel;
|
|
100
115
|
|
|
101
116
|
let y: N | undefined = undefined;
|
|
102
117
|
let x: N | undefined = this.root;
|
|
103
118
|
|
|
104
|
-
while (x !== this.
|
|
119
|
+
while (x !== this.Sentinel) {
|
|
105
120
|
y = x;
|
|
106
121
|
if (x) {
|
|
107
122
|
if (node.key < x.key) {
|
|
@@ -139,10 +154,6 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
|
|
|
139
154
|
this._size++;
|
|
140
155
|
}
|
|
141
156
|
|
|
142
|
-
override createNode(key: BTNKey, value?: V, color: RBTNColor = RBTNColor.BLACK): N {
|
|
143
|
-
return new RedBlackTreeNode<V, N>(key, value, color) as N;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
157
|
/**
|
|
147
158
|
* Time Complexity: O(log n) on average (where n is the number of nodes in the tree)
|
|
148
159
|
* Space Complexity: O(1)
|
|
@@ -170,9 +181,9 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
|
|
|
170
181
|
const ans: BiTreeDeleteResult<N>[] = [];
|
|
171
182
|
if (identifier === null) return ans;
|
|
172
183
|
const helper = (node: N | undefined): void => {
|
|
173
|
-
let z: N = this.
|
|
184
|
+
let z: N = this.Sentinel;
|
|
174
185
|
let x: N | undefined, y: N;
|
|
175
|
-
while (node !== this.
|
|
186
|
+
while (node !== this.Sentinel) {
|
|
176
187
|
if (node && callback(node) === identifier) {
|
|
177
188
|
z = node;
|
|
178
189
|
}
|
|
@@ -184,17 +195,17 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
|
|
|
184
195
|
}
|
|
185
196
|
}
|
|
186
197
|
|
|
187
|
-
if (z === this.
|
|
198
|
+
if (z === this.Sentinel) {
|
|
188
199
|
this._size--;
|
|
189
200
|
return;
|
|
190
201
|
}
|
|
191
202
|
|
|
192
203
|
y = z;
|
|
193
204
|
let yOriginalColor: number = y.color;
|
|
194
|
-
if (z.left === this.
|
|
205
|
+
if (z.left === this.Sentinel) {
|
|
195
206
|
x = z.right;
|
|
196
207
|
this._rbTransplant(z, z.right!);
|
|
197
|
-
} else if (z.right === this.
|
|
208
|
+
} else if (z.right === this.Sentinel) {
|
|
198
209
|
x = z.left;
|
|
199
210
|
this._rbTransplant(z, z.left!);
|
|
200
211
|
} else {
|
|
@@ -225,7 +236,7 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
|
|
|
225
236
|
}
|
|
226
237
|
|
|
227
238
|
override isRealNode(node: N | undefined): node is N {
|
|
228
|
-
return node !== this.
|
|
239
|
+
return node !== this.Sentinel && node !== undefined;
|
|
229
240
|
}
|
|
230
241
|
|
|
231
242
|
getNode<C extends BTNCallback<N, BTNKey>>(
|
|
@@ -279,7 +290,7 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
|
|
|
279
290
|
identifier: ReturnType<C> | undefined,
|
|
280
291
|
callback: C = this._defaultOneParamCallback as C,
|
|
281
292
|
beginRoot: BTNKey | N | undefined = this.root,
|
|
282
|
-
iterationType = this.iterationType
|
|
293
|
+
iterationType = this.options.iterationType
|
|
283
294
|
): N | null | undefined {
|
|
284
295
|
if ((identifier as any) instanceof BinaryTreeNode) callback = (node => node) as C;
|
|
285
296
|
beginRoot = this.ensureNotKey(beginRoot);
|
|
@@ -300,12 +311,12 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
|
|
|
300
311
|
* @returns the successor of the given RedBlackTreeNode.
|
|
301
312
|
*/
|
|
302
313
|
override getSuccessor(x: N): N | undefined {
|
|
303
|
-
if (x.right !== this.
|
|
314
|
+
if (x.right !== this.Sentinel) {
|
|
304
315
|
return this.getLeftMost(x.right) ?? undefined;
|
|
305
316
|
}
|
|
306
317
|
|
|
307
318
|
let y: N | undefined = x.parent;
|
|
308
|
-
while (y !== this.
|
|
319
|
+
while (y !== this.Sentinel && y !== undefined && x === y.right) {
|
|
309
320
|
x = y;
|
|
310
321
|
y = y.parent;
|
|
311
322
|
}
|
|
@@ -327,12 +338,12 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
|
|
|
327
338
|
* @returns the predecessor of the given RedBlackTreeNode 'x'.
|
|
328
339
|
*/
|
|
329
340
|
override getPredecessor(x: N): N {
|
|
330
|
-
if (x.left !== this.
|
|
341
|
+
if (x.left !== this.Sentinel) {
|
|
331
342
|
return this.getRightMost(x.left!)!;
|
|
332
343
|
}
|
|
333
344
|
|
|
334
345
|
let y: N | undefined = x.parent;
|
|
335
|
-
while (y !== this.
|
|
346
|
+
while (y !== this.Sentinel && x === y!.left) {
|
|
336
347
|
x = y!;
|
|
337
348
|
y = y!.parent;
|
|
338
349
|
}
|
|
@@ -341,7 +352,7 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
|
|
|
341
352
|
}
|
|
342
353
|
|
|
343
354
|
override clear() {
|
|
344
|
-
this._root = this.
|
|
355
|
+
this._root = this.Sentinel;
|
|
345
356
|
this._size = 0;
|
|
346
357
|
}
|
|
347
358
|
|
|
@@ -368,7 +379,7 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
|
|
|
368
379
|
if (x.right) {
|
|
369
380
|
const y: N = x.right;
|
|
370
381
|
x.right = y.left;
|
|
371
|
-
if (y.left !== this.
|
|
382
|
+
if (y.left !== this.Sentinel) {
|
|
372
383
|
if (y.left) y.left.parent = x;
|
|
373
384
|
}
|
|
374
385
|
y.parent = x.parent;
|
|
@@ -401,7 +412,7 @@ export class RedBlackTree<V = any, N extends RedBlackTreeNode<V, N> = RedBlackTr
|
|
|
401
412
|
if (x.left) {
|
|
402
413
|
const y: N = x.left;
|
|
403
414
|
x.left = y.right;
|
|
404
|
-
if (y.right !== this.
|
|
415
|
+
if (y.right !== this.Sentinel) {
|
|
405
416
|
if (y.right) y.right.parent = x;
|
|
406
417
|
}
|
|
407
418
|
y.parent = x.parent;
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* @license MIT License
|
|
7
7
|
*/
|
|
8
8
|
import type { BTNKey, TreeMultimapNodeNested, TreeMultimapOptions } from '../../types';
|
|
9
|
-
import { BiTreeDeleteResult, BTNCallback, CP, FamilyPosition, IterationType } from '../../types';
|
|
9
|
+
import { BiTreeDeleteResult, BTNCallback, CP, FamilyPosition, IterationType, TreeMultimapNested } from '../../types';
|
|
10
10
|
import { IBinaryTree } from '../../interfaces';
|
|
11
11
|
import { AVLTree, AVLTreeNode } from './avl-tree';
|
|
12
12
|
|
|
@@ -35,17 +35,26 @@ export class TreeMultimapNode<
|
|
|
35
35
|
/**
|
|
36
36
|
* The only distinction between a TreeMultimap and a AVLTree lies in the ability of the former to store duplicate nodes through the utilization of counters.
|
|
37
37
|
*/
|
|
38
|
-
export class TreeMultimap<V = any, N extends TreeMultimapNode<V, N> = TreeMultimapNode<V, TreeMultimapNodeNested<V
|
|
39
|
-
extends
|
|
40
|
-
|
|
38
|
+
export class TreeMultimap<V = any, N extends TreeMultimapNode<V, N> = TreeMultimapNode<V, TreeMultimapNodeNested<V>>,
|
|
39
|
+
TREE extends TreeMultimap<V, N, TREE> = TreeMultimap<V, N, TreeMultimapNested<V, N>>>
|
|
40
|
+
extends AVLTree<V, N, TREE>
|
|
41
|
+
implements IBinaryTree<V, N, TREE> {
|
|
42
|
+
|
|
43
|
+
override options: TreeMultimapOptions;
|
|
44
|
+
|
|
41
45
|
/**
|
|
42
46
|
* The constructor function for a TreeMultimap class in TypeScript, which extends another class and sets an option to
|
|
43
47
|
* merge duplicated values.
|
|
44
48
|
* @param {TreeMultimapOptions} [options] - An optional object that contains additional configuration options for the
|
|
45
49
|
* TreeMultimap.
|
|
46
50
|
*/
|
|
47
|
-
constructor(options
|
|
51
|
+
constructor(options: TreeMultimapOptions = { iterationType: IterationType.ITERATIVE }) {
|
|
48
52
|
super(options);
|
|
53
|
+
if (options) {
|
|
54
|
+
this.options = { iterationType: IterationType.ITERATIVE, comparator: (a, b) => a - b, ...options }
|
|
55
|
+
} else {
|
|
56
|
+
this.options = { iterationType: IterationType.ITERATIVE, comparator: (a, b) => a - b };
|
|
57
|
+
}
|
|
49
58
|
}
|
|
50
59
|
|
|
51
60
|
private _count = 0;
|
|
@@ -67,6 +76,10 @@ export class TreeMultimap<V = any, N extends TreeMultimapNode<V, N> = TreeMultim
|
|
|
67
76
|
return new TreeMultimapNode(key, value, count) as N;
|
|
68
77
|
}
|
|
69
78
|
|
|
79
|
+
override createTree(options?: TreeMultimapOptions): TREE {
|
|
80
|
+
return new TreeMultimap<V, N, TREE>({ ...this.options, ...options }) as TREE;
|
|
81
|
+
}
|
|
82
|
+
|
|
70
83
|
/**
|
|
71
84
|
* Time Complexity: O(log n) - logarithmic time, where "n" is the number of nodes in the tree. The add method of the superclass (AVLTree) has logarithmic time complexity.
|
|
72
85
|
* Space Complexity: O(1) - constant space, as it doesn't use additional data structures that scale with input size.
|
|
@@ -210,7 +223,7 @@ export class TreeMultimap<V = any, N extends TreeMultimapNode<V, N> = TreeMultim
|
|
|
210
223
|
* values:
|
|
211
224
|
* @returns a boolean value.
|
|
212
225
|
*/
|
|
213
|
-
override perfectlyBalance(iterationType = this.iterationType): boolean {
|
|
226
|
+
override perfectlyBalance(iterationType = this.options.iterationType): boolean {
|
|
214
227
|
const sorted = this.dfs(node => node, 'in'),
|
|
215
228
|
n = sorted.length;
|
|
216
229
|
if (sorted.length < 1) return false;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { BinaryTreeNode } from '../data-structures';
|
|
2
|
-
import { BinaryTreeNodeNested, BiTreeDeleteResult, BTNCallback, BTNKey } from '../types';
|
|
1
|
+
import { BinaryTree, BinaryTreeNode } from '../data-structures';
|
|
2
|
+
import { BinaryTreeNested, BinaryTreeNodeNested, BiTreeDeleteResult, BTNCallback, BTNKey } from '../types';
|
|
3
3
|
|
|
4
|
-
export interface IBinaryTree<V = any, N extends BinaryTreeNode<V, N> = BinaryTreeNodeNested<V>> {
|
|
4
|
+
export interface IBinaryTree<V = any, N extends BinaryTreeNode<V, N> = BinaryTreeNodeNested<V>, TREE extends BinaryTree<V, N, TREE> = BinaryTreeNested<V, N>> {
|
|
5
5
|
createNode(key: BTNKey, value?: N['value']): N;
|
|
6
6
|
|
|
7
7
|
add(keyOrNode: BTNKey | N | null, value?: N['value']): N | null | undefined;
|
package/src/types/common.ts
CHANGED
|
@@ -10,11 +10,6 @@ export enum CP {
|
|
|
10
10
|
gt = 'gt'
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
export const enum IterateDirection {
|
|
14
|
-
DEFAULT = 0,
|
|
15
|
-
REVERSE = 1
|
|
16
|
-
}
|
|
17
|
-
|
|
18
13
|
export interface IterableWithSize<T> extends Iterable<T> {
|
|
19
14
|
size: number | ((...args: any[]) => number);
|
|
20
15
|
}
|
|
@@ -24,3 +19,5 @@ export interface IterableWithLength<T> extends Iterable<T> {
|
|
|
24
19
|
}
|
|
25
20
|
|
|
26
21
|
export type IterableWithSizeOrLength<T> = IterableWithSize<T> | IterableWithLength<T>
|
|
22
|
+
|
|
23
|
+
export type BinaryTreePrintOptions = { isShowUndefined?: boolean, isShowNull?: boolean, isShowRedBlackNIL?: boolean }
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import { AVLTreeNode } from '../../../data-structures';
|
|
1
|
+
import { AVLTree, AVLTreeNode } from '../../../data-structures';
|
|
2
2
|
import { BSTOptions } from './bst';
|
|
3
3
|
|
|
4
4
|
export type AVLTreeNodeNested<T> = AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, AVLTreeNode<T, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
5
|
+
|
|
6
|
+
export type AVLTreeNested<T, N extends AVLTreeNode<T, N>> = AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, AVLTree<T, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
7
|
+
|
|
8
|
+
|
|
5
9
|
export type AVLTreeOptions = BSTOptions & {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BinaryTreeNode } from '../../../data-structures';
|
|
1
|
+
import { BinaryTree, BinaryTreeNode } from '../../../data-structures';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Enum representing different loop types.
|
|
@@ -28,10 +28,8 @@ export type BiTreeDeleteResult<N> = { deleted: N | null | undefined; needBalance
|
|
|
28
28
|
|
|
29
29
|
export type BinaryTreeNodeNested<T> = BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, BinaryTreeNode<T, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
30
30
|
|
|
31
|
+
export type BinaryTreeNested<T, N extends BinaryTreeNode<T, N>> = BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, BinaryTree<T, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
32
|
+
|
|
31
33
|
export type BinaryTreeOptions = { iterationType?: IterationType }
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
//
|
|
35
|
-
// export type BTNIdentifierOrU<N> = BTNKey | N | undefined;
|
|
36
|
-
//
|
|
37
|
-
// export type BTNOrNU<N> = N | null | undefined;
|
|
34
|
+
|
|
35
|
+
export type NodeDisplayLayout = [string[], number, number, number];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BSTNode } from '../../../data-structures';
|
|
1
|
+
import { BST, BSTNode } from '../../../data-structures';
|
|
2
2
|
import type { BinaryTreeOptions, BTNKey } from './binary-tree';
|
|
3
3
|
|
|
4
4
|
export type BSTComparator = (a: BTNKey, b: BTNKey) => number;
|
|
@@ -6,6 +6,8 @@ export type BSTComparator = (a: BTNKey, b: BTNKey) => number;
|
|
|
6
6
|
// prettier-ignore
|
|
7
7
|
export type BSTNodeNested<T> = BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, BSTNode<T, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
8
8
|
|
|
9
|
+
export type BSTNested<T, N extends BSTNode<T, N>> = BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, BST<T, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
10
|
+
|
|
9
11
|
export type BSTOptions = BinaryTreeOptions & {
|
|
10
12
|
comparator?: BSTComparator,
|
|
11
13
|
}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { RedBlackTreeNode } from '../../../data-structures';
|
|
1
|
+
import { RedBlackTree, RedBlackTreeNode } from '../../../data-structures';
|
|
2
2
|
import { BSTOptions } from "./bst";
|
|
3
3
|
|
|
4
4
|
export enum RBTNColor { RED = 1, BLACK = 0}
|
|
5
5
|
|
|
6
6
|
export type RedBlackTreeNodeNested<T> = RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, RedBlackTreeNode<T, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
7
7
|
|
|
8
|
+
export type RedBlackTreeNested<T, N extends RedBlackTreeNode<T, N>> = RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, RedBlackTree<T, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
9
|
+
|
|
8
10
|
export type RBTreeOptions = BSTOptions & {};
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import { TreeMultimapNode } from '../../../data-structures';
|
|
1
|
+
import { TreeMultimap, TreeMultimapNode } from '../../../data-structures';
|
|
2
2
|
import { AVLTreeOptions } from './avl-tree';
|
|
3
3
|
|
|
4
4
|
export type TreeMultimapNodeNested<T> = TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, TreeMultimapNode<T, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
5
5
|
|
|
6
|
+
export type TreeMultimapNested<T, N extends TreeMultimapNode<T, N>> = TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, TreeMultimap<T, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
7
|
+
|
|
6
8
|
export type TreeMultimapOptions = Omit<AVLTreeOptions, 'isMergeDuplicatedNodeByKey'> & {}
|