data-structure-typed 2.0.5 → 2.1.0
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/CHANGELOG.md +1 -1
- package/COMMANDS.md +17 -0
- package/benchmark/report.html +13 -77
- package/benchmark/report.json +145 -177
- package/dist/cjs/data-structures/base/iterable-element-base.d.ts +186 -83
- package/dist/cjs/data-structures/base/iterable-element-base.js +149 -107
- package/dist/cjs/data-structures/base/iterable-element-base.js.map +1 -1
- package/dist/cjs/data-structures/base/iterable-entry-base.d.ts +95 -119
- package/dist/cjs/data-structures/base/iterable-entry-base.js +59 -116
- package/dist/cjs/data-structures/base/iterable-entry-base.js.map +1 -1
- package/dist/cjs/data-structures/base/linear-base.d.ts +250 -192
- package/dist/cjs/data-structures/base/linear-base.js +137 -274
- package/dist/cjs/data-structures/base/linear-base.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/avl-tree-counter.d.ts +126 -158
- package/dist/cjs/data-structures/binary-tree/avl-tree-counter.js +171 -205
- package/dist/cjs/data-structures/binary-tree/avl-tree-counter.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +100 -69
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +135 -87
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +138 -149
- package/dist/cjs/data-structures/binary-tree/avl-tree.js +208 -195
- package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +476 -632
- package/dist/cjs/data-structures/binary-tree/binary-tree.js +594 -865
- package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/bst.d.ts +258 -306
- package/dist/cjs/data-structures/binary-tree/bst.js +505 -481
- package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/red-black-tree.d.ts +107 -179
- package/dist/cjs/data-structures/binary-tree/red-black-tree.js +114 -209
- package/dist/cjs/data-structures/binary-tree/red-black-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/tree-counter.d.ts +132 -154
- package/dist/cjs/data-structures/binary-tree/tree-counter.js +172 -203
- package/dist/cjs/data-structures/binary-tree/tree-counter.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +72 -69
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +105 -85
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
- package/dist/cjs/data-structures/graph/abstract-graph.d.ts +238 -233
- package/dist/cjs/data-structures/graph/abstract-graph.js +267 -237
- package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
- package/dist/cjs/data-structures/graph/directed-graph.d.ts +108 -224
- package/dist/cjs/data-structures/graph/directed-graph.js +146 -233
- package/dist/cjs/data-structures/graph/directed-graph.js.map +1 -1
- package/dist/cjs/data-structures/graph/map-graph.d.ts +49 -55
- package/dist/cjs/data-structures/graph/map-graph.js +56 -59
- package/dist/cjs/data-structures/graph/map-graph.js.map +1 -1
- package/dist/cjs/data-structures/graph/undirected-graph.d.ts +103 -146
- package/dist/cjs/data-structures/graph/undirected-graph.js +129 -149
- package/dist/cjs/data-structures/graph/undirected-graph.js.map +1 -1
- package/dist/cjs/data-structures/hash/hash-map.d.ts +164 -338
- package/dist/cjs/data-structures/hash/hash-map.js +270 -457
- package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
- package/dist/cjs/data-structures/heap/heap.d.ts +214 -289
- package/dist/cjs/data-structures/heap/heap.js +340 -349
- package/dist/cjs/data-structures/heap/heap.js.map +1 -1
- package/dist/cjs/data-structures/heap/max-heap.d.ts +11 -47
- package/dist/cjs/data-structures/heap/max-heap.js +11 -66
- package/dist/cjs/data-structures/heap/max-heap.js.map +1 -1
- package/dist/cjs/data-structures/heap/min-heap.d.ts +12 -47
- package/dist/cjs/data-structures/heap/min-heap.js +11 -66
- package/dist/cjs/data-structures/heap/min-heap.js.map +1 -1
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +231 -347
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +368 -494
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
- package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +261 -310
- package/dist/cjs/data-structures/linked-list/singly-linked-list.js +447 -466
- package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
- package/dist/cjs/data-structures/linked-list/skip-linked-list.d.ts +0 -107
- package/dist/cjs/data-structures/linked-list/skip-linked-list.js +0 -100
- package/dist/cjs/data-structures/linked-list/skip-linked-list.js.map +1 -1
- package/dist/cjs/data-structures/priority-queue/max-priority-queue.d.ts +12 -56
- package/dist/cjs/data-structures/priority-queue/max-priority-queue.js +11 -78
- package/dist/cjs/data-structures/priority-queue/max-priority-queue.js.map +1 -1
- package/dist/cjs/data-structures/priority-queue/min-priority-queue.d.ts +11 -57
- package/dist/cjs/data-structures/priority-queue/min-priority-queue.js +10 -79
- package/dist/cjs/data-structures/priority-queue/min-priority-queue.js.map +1 -1
- package/dist/cjs/data-structures/priority-queue/priority-queue.d.ts +2 -61
- package/dist/cjs/data-structures/priority-queue/priority-queue.js +8 -83
- package/dist/cjs/data-structures/priority-queue/priority-queue.js.map +1 -1
- package/dist/cjs/data-structures/queue/deque.d.ts +227 -254
- package/dist/cjs/data-structures/queue/deque.js +309 -348
- package/dist/cjs/data-structures/queue/deque.js.map +1 -1
- package/dist/cjs/data-structures/queue/queue.d.ts +180 -201
- package/dist/cjs/data-structures/queue/queue.js +265 -248
- package/dist/cjs/data-structures/queue/queue.js.map +1 -1
- package/dist/cjs/data-structures/stack/stack.d.ts +124 -102
- package/dist/cjs/data-structures/stack/stack.js +181 -125
- package/dist/cjs/data-structures/stack/stack.js.map +1 -1
- package/dist/cjs/data-structures/trie/trie.d.ts +164 -165
- package/dist/cjs/data-structures/trie/trie.js +189 -172
- package/dist/cjs/data-structures/trie/trie.js.map +1 -1
- package/dist/cjs/interfaces/binary-tree.d.ts +56 -6
- package/dist/cjs/interfaces/graph.d.ts +16 -0
- package/dist/cjs/types/data-structures/base/base.d.ts +1 -1
- package/dist/cjs/types/data-structures/graph/abstract-graph.d.ts +4 -0
- package/dist/cjs/types/utils/utils.d.ts +1 -0
- package/dist/cjs/utils/utils.d.ts +1 -1
- package/dist/cjs/utils/utils.js +2 -1
- package/dist/cjs/utils/utils.js.map +1 -1
- package/dist/esm/data-structures/base/iterable-element-base.d.ts +186 -83
- package/dist/esm/data-structures/base/iterable-element-base.js +155 -107
- package/dist/esm/data-structures/base/iterable-element-base.js.map +1 -1
- package/dist/esm/data-structures/base/iterable-entry-base.d.ts +95 -119
- package/dist/esm/data-structures/base/iterable-entry-base.js +59 -116
- package/dist/esm/data-structures/base/iterable-entry-base.js.map +1 -1
- package/dist/esm/data-structures/base/linear-base.d.ts +250 -192
- package/dist/esm/data-structures/base/linear-base.js +137 -274
- package/dist/esm/data-structures/base/linear-base.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/avl-tree-counter.d.ts +126 -158
- package/dist/esm/data-structures/binary-tree/avl-tree-counter.js +171 -212
- package/dist/esm/data-structures/binary-tree/avl-tree-counter.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.d.ts +100 -69
- package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js +133 -94
- package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/avl-tree.d.ts +138 -149
- package/dist/esm/data-structures/binary-tree/avl-tree.js +206 -200
- package/dist/esm/data-structures/binary-tree/avl-tree.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/binary-tree.d.ts +476 -632
- package/dist/esm/data-structures/binary-tree/binary-tree.js +598 -874
- package/dist/esm/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/bst.d.ts +258 -306
- package/dist/esm/data-structures/binary-tree/bst.js +507 -487
- package/dist/esm/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/red-black-tree.d.ts +107 -179
- package/dist/esm/data-structures/binary-tree/red-black-tree.js +114 -215
- package/dist/esm/data-structures/binary-tree/red-black-tree.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/tree-counter.d.ts +132 -154
- package/dist/esm/data-structures/binary-tree/tree-counter.js +175 -209
- package/dist/esm/data-structures/binary-tree/tree-counter.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/tree-multi-map.d.ts +72 -69
- package/dist/esm/data-structures/binary-tree/tree-multi-map.js +103 -92
- package/dist/esm/data-structures/binary-tree/tree-multi-map.js.map +1 -1
- package/dist/esm/data-structures/graph/abstract-graph.d.ts +238 -233
- package/dist/esm/data-structures/graph/abstract-graph.js +267 -237
- package/dist/esm/data-structures/graph/abstract-graph.js.map +1 -1
- package/dist/esm/data-structures/graph/directed-graph.d.ts +108 -224
- package/dist/esm/data-structures/graph/directed-graph.js +145 -233
- package/dist/esm/data-structures/graph/directed-graph.js.map +1 -1
- package/dist/esm/data-structures/graph/map-graph.d.ts +49 -55
- package/dist/esm/data-structures/graph/map-graph.js +56 -59
- package/dist/esm/data-structures/graph/map-graph.js.map +1 -1
- package/dist/esm/data-structures/graph/undirected-graph.d.ts +103 -146
- package/dist/esm/data-structures/graph/undirected-graph.js +128 -149
- package/dist/esm/data-structures/graph/undirected-graph.js.map +1 -1
- package/dist/esm/data-structures/hash/hash-map.d.ts +164 -338
- package/dist/esm/data-structures/hash/hash-map.js +270 -457
- package/dist/esm/data-structures/hash/hash-map.js.map +1 -1
- package/dist/esm/data-structures/heap/heap.d.ts +214 -289
- package/dist/esm/data-structures/heap/heap.js +329 -349
- package/dist/esm/data-structures/heap/heap.js.map +1 -1
- package/dist/esm/data-structures/heap/max-heap.d.ts +11 -47
- package/dist/esm/data-structures/heap/max-heap.js +11 -66
- package/dist/esm/data-structures/heap/max-heap.js.map +1 -1
- package/dist/esm/data-structures/heap/min-heap.d.ts +12 -47
- package/dist/esm/data-structures/heap/min-heap.js +11 -66
- package/dist/esm/data-structures/heap/min-heap.js.map +1 -1
- package/dist/esm/data-structures/linked-list/doubly-linked-list.d.ts +231 -347
- package/dist/esm/data-structures/linked-list/doubly-linked-list.js +368 -495
- package/dist/esm/data-structures/linked-list/doubly-linked-list.js.map +1 -1
- package/dist/esm/data-structures/linked-list/singly-linked-list.d.ts +261 -310
- package/dist/esm/data-structures/linked-list/singly-linked-list.js +448 -467
- package/dist/esm/data-structures/linked-list/singly-linked-list.js.map +1 -1
- package/dist/esm/data-structures/linked-list/skip-linked-list.d.ts +0 -107
- package/dist/esm/data-structures/linked-list/skip-linked-list.js +0 -100
- package/dist/esm/data-structures/linked-list/skip-linked-list.js.map +1 -1
- package/dist/esm/data-structures/priority-queue/max-priority-queue.d.ts +12 -56
- package/dist/esm/data-structures/priority-queue/max-priority-queue.js +11 -78
- package/dist/esm/data-structures/priority-queue/max-priority-queue.js.map +1 -1
- package/dist/esm/data-structures/priority-queue/min-priority-queue.d.ts +11 -57
- package/dist/esm/data-structures/priority-queue/min-priority-queue.js +10 -79
- package/dist/esm/data-structures/priority-queue/min-priority-queue.js.map +1 -1
- package/dist/esm/data-structures/priority-queue/priority-queue.d.ts +2 -61
- package/dist/esm/data-structures/priority-queue/priority-queue.js +8 -83
- package/dist/esm/data-structures/priority-queue/priority-queue.js.map +1 -1
- package/dist/esm/data-structures/queue/deque.d.ts +227 -254
- package/dist/esm/data-structures/queue/deque.js +313 -348
- package/dist/esm/data-structures/queue/deque.js.map +1 -1
- package/dist/esm/data-structures/queue/queue.d.ts +180 -201
- package/dist/esm/data-structures/queue/queue.js +263 -248
- package/dist/esm/data-structures/queue/queue.js.map +1 -1
- package/dist/esm/data-structures/stack/stack.d.ts +124 -102
- package/dist/esm/data-structures/stack/stack.js +181 -125
- package/dist/esm/data-structures/stack/stack.js.map +1 -1
- package/dist/esm/data-structures/trie/trie.d.ts +164 -165
- package/dist/esm/data-structures/trie/trie.js +193 -172
- package/dist/esm/data-structures/trie/trie.js.map +1 -1
- package/dist/esm/interfaces/binary-tree.d.ts +56 -6
- package/dist/esm/interfaces/graph.d.ts +16 -0
- package/dist/esm/types/data-structures/base/base.d.ts +1 -1
- package/dist/esm/types/data-structures/graph/abstract-graph.d.ts +4 -0
- package/dist/esm/types/utils/utils.d.ts +1 -0
- package/dist/esm/utils/utils.d.ts +1 -1
- package/dist/esm/utils/utils.js +2 -1
- package/dist/esm/utils/utils.js.map +1 -1
- package/dist/umd/data-structure-typed.js +4685 -6477
- package/dist/umd/data-structure-typed.min.js +8 -6
- package/dist/umd/data-structure-typed.min.js.map +1 -1
- package/package.json +3 -4
- package/src/data-structures/base/iterable-element-base.ts +238 -115
- package/src/data-structures/base/iterable-entry-base.ts +96 -120
- package/src/data-structures/base/linear-base.ts +271 -277
- package/src/data-structures/binary-tree/avl-tree-counter.ts +198 -216
- package/src/data-structures/binary-tree/avl-tree-multi-map.ts +192 -101
- package/src/data-structures/binary-tree/avl-tree.ts +239 -206
- package/src/data-structures/binary-tree/binary-tree.ts +660 -889
- package/src/data-structures/binary-tree/bst.ts +568 -570
- package/src/data-structures/binary-tree/red-black-tree.ts +161 -222
- package/src/data-structures/binary-tree/tree-counter.ts +199 -218
- package/src/data-structures/binary-tree/tree-multi-map.ts +131 -97
- package/src/data-structures/graph/abstract-graph.ts +339 -264
- package/src/data-structures/graph/directed-graph.ts +146 -236
- package/src/data-structures/graph/map-graph.ts +63 -60
- package/src/data-structures/graph/undirected-graph.ts +129 -152
- package/src/data-structures/hash/hash-map.ts +274 -496
- package/src/data-structures/heap/heap.ts +389 -402
- package/src/data-structures/heap/max-heap.ts +12 -76
- package/src/data-structures/heap/min-heap.ts +13 -76
- package/src/data-structures/linked-list/doubly-linked-list.ts +426 -530
- package/src/data-structures/linked-list/singly-linked-list.ts +495 -517
- package/src/data-structures/linked-list/skip-linked-list.ts +1 -108
- package/src/data-structures/priority-queue/max-priority-queue.ts +12 -87
- package/src/data-structures/priority-queue/min-priority-queue.ts +11 -88
- package/src/data-structures/priority-queue/priority-queue.ts +3 -92
- package/src/data-structures/queue/deque.ts +381 -357
- package/src/data-structures/queue/queue.ts +310 -264
- package/src/data-structures/stack/stack.ts +217 -131
- package/src/data-structures/trie/trie.ts +240 -175
- package/src/interfaces/binary-tree.ts +240 -6
- package/src/interfaces/graph.ts +37 -0
- package/src/types/data-structures/base/base.ts +5 -5
- package/src/types/data-structures/graph/abstract-graph.ts +5 -0
- package/src/types/utils/utils.ts +2 -0
- package/src/utils/utils.ts +9 -14
- package/test/integration/index.html +1 -1
- package/test/performance/benchmark-runner.ts +528 -0
- package/test/performance/reportor.mjs +43 -43
- package/test/performance/runner-config.json +39 -0
- package/test/performance/single-suite-runner.ts +69 -0
- package/test/unit/data-structures/binary-tree/avl-tree-counter.test.ts +3 -3
- package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +5 -5
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +4 -4
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +350 -90
- package/test/unit/data-structures/binary-tree/bst.test.ts +12 -9
- package/test/unit/data-structures/binary-tree/red-black-tree.test.ts +2 -2
- package/test/unit/data-structures/binary-tree/tree-counter.test.ts +25 -24
- package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +3 -3
- package/test/unit/data-structures/graph/abstract-graph.test.ts +0 -4
- package/test/unit/data-structures/graph/directed-graph.test.ts +1 -1
- package/test/unit/data-structures/heap/heap.test.ts +14 -21
- package/test/unit/data-structures/heap/max-heap.test.ts +5 -9
- package/test/unit/data-structures/heap/min-heap.test.ts +1 -4
- package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +14 -14
- package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +0 -7
- package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +8 -11
- package/test/unit/data-structures/priority-queue/min-priority-queue.test.ts +1 -4
- package/test/unit/data-structures/priority-queue/priority-queue.test.ts +1 -4
- package/test/unit/data-structures/queue/queue.test.ts +4 -5
- package/test/unit/utils/utils.test.ts +0 -1
- package/test/performance/data-structures/binary-tree/avl-tree.test.mjs +0 -71
- package/test/performance/data-structures/binary-tree/red-black-tree.test.mjs +0 -81
|
@@ -1,24 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* data-structure-typed
|
|
3
|
+
*
|
|
4
|
+
* @author Pablo Zeng
|
|
5
|
+
* @copyright Copyright (c) 2022 Pablo Zeng <zrwusa@gmail.com>
|
|
6
|
+
* @license MIT License
|
|
7
|
+
*/
|
|
1
8
|
import { BST, BSTNode } from './bst';
|
|
2
9
|
export class RedBlackTreeNode extends BSTNode {
|
|
3
10
|
parent = undefined;
|
|
4
11
|
/**
|
|
5
|
-
*
|
|
6
|
-
* @
|
|
7
|
-
*
|
|
8
|
-
* @param
|
|
9
|
-
*
|
|
10
|
-
* @
|
|
11
|
-
* color of the node in a Red-Black Tree. It has a default value of 'BLACK' if not provided
|
|
12
|
-
* explicitly.
|
|
12
|
+
* Create a Red-Black Tree and optionally bulk-insert items.
|
|
13
|
+
* @remarks Time O(n log n), Space O(n)
|
|
14
|
+
* @param key - See parameter type for details.
|
|
15
|
+
* @param [value]- See parameter type for details.
|
|
16
|
+
* @param color - See parameter type for details.
|
|
17
|
+
* @returns New RedBlackTree instance.
|
|
13
18
|
*/
|
|
14
19
|
constructor(key, value, color = 'BLACK') {
|
|
15
20
|
super(key, value);
|
|
16
21
|
this._color = color;
|
|
17
22
|
}
|
|
18
23
|
_left = undefined;
|
|
24
|
+
/**
|
|
25
|
+
* Get the left child pointer.
|
|
26
|
+
* @remarks Time O(1), Space O(1)
|
|
27
|
+
* @returns Left child node, or null/undefined.
|
|
28
|
+
*/
|
|
19
29
|
get left() {
|
|
20
30
|
return this._left;
|
|
21
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Set the left child and update its parent pointer.
|
|
34
|
+
* @remarks Time O(1), Space O(1)
|
|
35
|
+
* @param v - New left node, or null/undefined.
|
|
36
|
+
* @returns void
|
|
37
|
+
*/
|
|
22
38
|
set left(v) {
|
|
23
39
|
if (v) {
|
|
24
40
|
v.parent = this;
|
|
@@ -26,9 +42,20 @@ export class RedBlackTreeNode extends BSTNode {
|
|
|
26
42
|
this._left = v;
|
|
27
43
|
}
|
|
28
44
|
_right = undefined;
|
|
45
|
+
/**
|
|
46
|
+
* Get the right child pointer.
|
|
47
|
+
* @remarks Time O(1), Space O(1)
|
|
48
|
+
* @returns Right child node, or null/undefined.
|
|
49
|
+
*/
|
|
29
50
|
get right() {
|
|
30
51
|
return this._right;
|
|
31
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Set the right child and update its parent pointer.
|
|
55
|
+
* @remarks Time O(1), Space O(1)
|
|
56
|
+
* @param v - New right node, or null/undefined.
|
|
57
|
+
* @returns void
|
|
58
|
+
*/
|
|
32
59
|
set right(v) {
|
|
33
60
|
if (v) {
|
|
34
61
|
v.parent = this;
|
|
@@ -37,6 +64,11 @@ export class RedBlackTreeNode extends BSTNode {
|
|
|
37
64
|
}
|
|
38
65
|
}
|
|
39
66
|
/**
|
|
67
|
+
* RRed-Black Tree (self-balancing BST) supporting map-like mode and stable O(log n) updates.
|
|
68
|
+
* @remarks Time O(1), Space O(1)
|
|
69
|
+
* @template K
|
|
70
|
+
* @template V
|
|
71
|
+
* @template R
|
|
40
72
|
* 1. Efficient self-balancing, but not completely balanced. Compared with AVLTree, the addition and deletion efficiency is high but the query efficiency is slightly lower.
|
|
41
73
|
* 2. It is BST itself. Compared with Heap which is not completely ordered, RedBlackTree is completely ordered.
|
|
42
74
|
* @example
|
|
@@ -84,17 +116,6 @@ export class RedBlackTreeNode extends BSTNode {
|
|
|
84
116
|
* console.log(stocksInRange); // ['GOOGL', 'META', 'MSFT']
|
|
85
117
|
*/
|
|
86
118
|
export class RedBlackTree extends BST {
|
|
87
|
-
/**
|
|
88
|
-
* This TypeScript constructor initializes a Red-Black Tree with optional keys, nodes, entries, or
|
|
89
|
-
* raw data.
|
|
90
|
-
* @param keysNodesEntriesOrRaws - The `keysNodesEntriesOrRaws` parameter in the constructor is an
|
|
91
|
-
* iterable that can contain either `K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined` objects or `R` objects. It
|
|
92
|
-
* is used to initialize the Red-Black Tree with keys, nodes, entries, or
|
|
93
|
-
* @param [options] - The `options` parameter in the constructor is of type `RedBlackTreeOptions<K,
|
|
94
|
-
* V, R>`. It is an optional parameter that allows you to specify additional options for the
|
|
95
|
-
* RedBlackTree class. These options could include configuration settings, behavior customization, or
|
|
96
|
-
* any other parameters that are specific to
|
|
97
|
-
*/
|
|
98
119
|
constructor(keysNodesEntriesOrRaws = [], options) {
|
|
99
120
|
super([], options);
|
|
100
121
|
this._root = this.NIL;
|
|
@@ -103,85 +124,49 @@ export class RedBlackTree extends BST {
|
|
|
103
124
|
}
|
|
104
125
|
}
|
|
105
126
|
_root;
|
|
127
|
+
/**
|
|
128
|
+
* Get the current root node.
|
|
129
|
+
* @remarks Time O(1), Space O(1)
|
|
130
|
+
* @returns Root node, or undefined.
|
|
131
|
+
*/
|
|
106
132
|
get root() {
|
|
107
133
|
return this._root;
|
|
108
134
|
}
|
|
109
135
|
/**
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
* @param
|
|
115
|
-
*
|
|
116
|
-
* function.
|
|
117
|
-
* @param {V} [value] - The `value` parameter is an optional parameter that represents the value
|
|
118
|
-
* associated with the key in the node. It is not required and can be omitted if you only need to
|
|
119
|
-
* create a node with a key.
|
|
120
|
-
* @param {RBTNColor} [color=BLACK] - The "color" parameter is used to specify the color of the node
|
|
121
|
-
* in a Red-Black Tree. It can have two possible values: "RED" or "BLACK". By default, the color is
|
|
122
|
-
* set to "BLACK" if not specified.
|
|
123
|
-
* @returns A new instance of a RedBlackTreeNode with the specified key, value, and color is being
|
|
124
|
-
* returned.
|
|
136
|
+
* Create a red-black node for the given key/value (value ignored in map mode).
|
|
137
|
+
* @remarks Time O(1), Space O(1)
|
|
138
|
+
* @param key - See parameter type for details.
|
|
139
|
+
* @param [value] - See parameter type for details.
|
|
140
|
+
* @param color - See parameter type for details.
|
|
141
|
+
* @returns A new RedBlackTreeNode instance.
|
|
125
142
|
*/
|
|
126
|
-
|
|
143
|
+
_createNode(key, value, color = 'BLACK') {
|
|
127
144
|
return new RedBlackTreeNode(key, this._isMapMode ? undefined : value, color);
|
|
128
145
|
}
|
|
129
146
|
/**
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
* @param [options] - The `options` parameter is an optional object that contains additional
|
|
135
|
-
* configuration options for creating the Red-Black Tree. It has the following properties:
|
|
136
|
-
* @returns a new instance of a RedBlackTree object.
|
|
137
|
-
*/
|
|
138
|
-
createTree(options) {
|
|
139
|
-
return new RedBlackTree([], {
|
|
140
|
-
iterationType: this.iterationType,
|
|
141
|
-
isMapMode: this._isMapMode,
|
|
142
|
-
specifyComparable: this._specifyComparable,
|
|
143
|
-
toEntryFn: this._toEntryFn,
|
|
144
|
-
...options
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Time Complexity: O(1)
|
|
149
|
-
* Space Complexity: O(1)
|
|
150
|
-
*
|
|
151
|
-
* The function checks if the input is an instance of the RedBlackTreeNode class.
|
|
152
|
-
* @param {K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined} keyNodeOrEntry - The parameter
|
|
153
|
-
* `keyNodeOrEntry` can be of type `R` or `K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined`.
|
|
154
|
-
* @returns a boolean value indicating whether the input parameter `keyNodeOrEntry` is
|
|
155
|
-
* an instance of the `RedBlackTreeNode` class.
|
|
147
|
+
* Type guard: check whether the input is a RedBlackTreeNode.
|
|
148
|
+
* @remarks Time O(1), Space O(1)
|
|
149
|
+
* @param keyNodeOrEntry - See parameter type for details.
|
|
150
|
+
* @returns True if the value is a RedBlackTreeNode.
|
|
156
151
|
*/
|
|
157
152
|
isNode(keyNodeOrEntry) {
|
|
158
153
|
return keyNodeOrEntry instanceof RedBlackTreeNode;
|
|
159
154
|
}
|
|
160
155
|
/**
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
*
|
|
164
|
-
* The "clear" function sets the root node of a data structure to a sentinel value and resets the
|
|
165
|
-
* size counter to zero.
|
|
156
|
+
* Remove all nodes and clear the key→value store (if in map mode).
|
|
157
|
+
* @remarks Time O(n), Space O(1)
|
|
158
|
+
* @returns void
|
|
166
159
|
*/
|
|
167
160
|
clear() {
|
|
168
161
|
super.clear();
|
|
169
162
|
this._root = this.NIL;
|
|
170
163
|
}
|
|
171
164
|
/**
|
|
172
|
-
*
|
|
173
|
-
*
|
|
174
|
-
*
|
|
175
|
-
*
|
|
176
|
-
*
|
|
177
|
-
* @param {K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined} keyNodeOrEntry - The parameter
|
|
178
|
-
* `keyNodeOrEntry` can accept a value of type `R` or `K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined`.
|
|
179
|
-
* @param {V} [value] - The `value` parameter is an optional value that you want to associate with
|
|
180
|
-
* the key in the data structure. It represents the value that you want to add or update in the data
|
|
181
|
-
* structure.
|
|
182
|
-
* @returns The method is returning a boolean value. If a new node is successfully added to the tree,
|
|
183
|
-
* the method returns true. If the node already exists and its value is updated, the method also
|
|
184
|
-
* returns true. If the node cannot be added or updated, the method returns false.
|
|
165
|
+
* Insert or replace an entry using BST order and red-black fix-up.
|
|
166
|
+
* @remarks Time O(log n), Space O(1)
|
|
167
|
+
* @param keyNodeOrEntry - Key, node, or [key, value] entry to insert.
|
|
168
|
+
* @param [value]- See parameter type for details.
|
|
169
|
+
* @returns True if inserted or updated; false if ignored.
|
|
185
170
|
*/
|
|
186
171
|
add(keyNodeOrEntry, value) {
|
|
187
172
|
const [newNode, newValue] = this._keyValueNodeOrEntryToNodeAndValue(keyNodeOrEntry, value);
|
|
@@ -189,7 +174,6 @@ export class RedBlackTree extends BST {
|
|
|
189
174
|
return false;
|
|
190
175
|
const insertStatus = this._insert(newNode);
|
|
191
176
|
if (insertStatus === 'CREATED') {
|
|
192
|
-
// Ensure the root is black
|
|
193
177
|
if (this.isRealNode(this._root)) {
|
|
194
178
|
this._root.color = 'BLACK';
|
|
195
179
|
}
|
|
@@ -209,18 +193,10 @@ export class RedBlackTree extends BST {
|
|
|
209
193
|
return false;
|
|
210
194
|
}
|
|
211
195
|
/**
|
|
212
|
-
*
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
*
|
|
216
|
-
* a given predicate and maintain the binary search tree properties.
|
|
217
|
-
* @param {K | RedBlackTreeNode<K, V> | [K | null | undefined, V | undefined] | null | undefined} keyNodeOrEntry - The `keyNodeOrEntry`
|
|
218
|
-
* parameter in the `override delete` method is used to specify the condition or key based on which a
|
|
219
|
-
* node should be deleted from the binary tree. It can be a key, a node, an entry, or a predicate
|
|
220
|
-
* function that determines which node(s) should be deleted.
|
|
221
|
-
* @returns The `override delete` method is returning an array of `BinaryTreeDeleteResult<RedBlackTreeNode<K, V>>`
|
|
222
|
-
* objects. Each object in the array contains information about the deleted node and whether
|
|
223
|
-
* balancing is needed.
|
|
196
|
+
* Delete a node by key/node/entry and rebalance as needed.
|
|
197
|
+
* @remarks Time O(log n), Space O(1)
|
|
198
|
+
* @param keyNodeOrEntry - Key, node, or [key, value] entry identifying the node to delete.
|
|
199
|
+
* @returns Array with deletion metadata (removed node, rebalancing hint if any).
|
|
224
200
|
*/
|
|
225
201
|
delete(keyNodeOrEntry) {
|
|
226
202
|
if (keyNodeOrEntry === null)
|
|
@@ -277,7 +253,6 @@ export class RedBlackTree extends BST {
|
|
|
277
253
|
if (this._isMapMode)
|
|
278
254
|
this._store.delete(nodeToDelete.key);
|
|
279
255
|
this._size--;
|
|
280
|
-
// If the original color was black, fix the tree
|
|
281
256
|
if (originalColor === 'BLACK') {
|
|
282
257
|
this._deleteFixup(replacementNode);
|
|
283
258
|
}
|
|
@@ -285,87 +260,47 @@ export class RedBlackTree extends BST {
|
|
|
285
260
|
return results;
|
|
286
261
|
}
|
|
287
262
|
/**
|
|
288
|
-
*
|
|
289
|
-
*
|
|
290
|
-
*
|
|
291
|
-
*
|
|
292
|
-
*
|
|
293
|
-
* @param callback -
|
|
294
|
-
*
|
|
295
|
-
*
|
|
296
|
-
* @
|
|
297
|
-
* MR>`. This parameter allows you to specify additional options or configurations for the Red-Black
|
|
298
|
-
* Tree that will be created during the mapping process. These options could include things like
|
|
299
|
-
* custom comparators
|
|
300
|
-
* @param {any} [thisArg] - The `thisArg` parameter in the `override map` function is used to specify
|
|
301
|
-
* the value of `this` when executing the `callback` function. It allows you to set the context
|
|
302
|
-
* (value of `this`) for the callback function. This can be useful when you want to access properties
|
|
303
|
-
* or
|
|
304
|
-
* @returns A new Red-Black Tree is being returned, where each entry has been transformed using the
|
|
305
|
-
* provided callback function.
|
|
263
|
+
* Transform entries into a like-kind red-black tree with possibly different key/value types.
|
|
264
|
+
* @remarks Time O(n), Space O(n)
|
|
265
|
+
* @template MK
|
|
266
|
+
* @template MV
|
|
267
|
+
* @template MR
|
|
268
|
+
* @param callback - Mapping function from (key, value, index, tree) to a new [key, value].
|
|
269
|
+
* @param [options] - See parameter type for details.
|
|
270
|
+
* @param [thisArg] - See parameter type for details.
|
|
271
|
+
* @returns A new RedBlackTree with mapped entries.
|
|
306
272
|
*/
|
|
307
273
|
map(callback, options, thisArg) {
|
|
308
|
-
const
|
|
274
|
+
const out = this._createLike([], options);
|
|
309
275
|
let index = 0;
|
|
310
276
|
for (const [key, value] of this) {
|
|
311
|
-
|
|
277
|
+
out.add(callback.call(thisArg, key, value, index++, this));
|
|
312
278
|
}
|
|
313
|
-
return
|
|
279
|
+
return out;
|
|
314
280
|
}
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
*/
|
|
323
|
-
clone() {
|
|
324
|
-
const cloned = this.createTree();
|
|
325
|
-
this._clone(cloned);
|
|
326
|
-
return cloned;
|
|
281
|
+
_createInstance(options) {
|
|
282
|
+
const Ctor = this.constructor;
|
|
283
|
+
return new Ctor([], { ...this._snapshotOptions(), ...(options ?? {}) });
|
|
284
|
+
}
|
|
285
|
+
_createLike(iter = [], options) {
|
|
286
|
+
const Ctor = this.constructor;
|
|
287
|
+
return new Ctor(iter, { ...this._snapshotOptions(), ...(options ?? {}) });
|
|
327
288
|
}
|
|
328
|
-
/**
|
|
329
|
-
* Time Complexity: O(1)
|
|
330
|
-
* Space Complexity: O(1)
|
|
331
|
-
*
|
|
332
|
-
* The function sets the root of a tree-like structure and updates the parent property of the new
|
|
333
|
-
* root.
|
|
334
|
-
* @param {RedBlackTreeNode<K, V> | undefined} v - v is a parameter of type RedBlackTreeNode<K, V> or undefined.
|
|
335
|
-
*/
|
|
336
289
|
_setRoot(v) {
|
|
337
290
|
if (v) {
|
|
338
291
|
v.parent = undefined;
|
|
339
292
|
}
|
|
340
293
|
this._root = v;
|
|
341
294
|
}
|
|
342
|
-
/**
|
|
343
|
-
* Time Complexity: O(1)
|
|
344
|
-
* Space Complexity: O(1)
|
|
345
|
-
*
|
|
346
|
-
* The function replaces an old node with a new node while preserving the color of the old node.
|
|
347
|
-
* @param {RedBlackTreeNode<K, V>} oldNode - The `oldNode` parameter represents the node that needs to be replaced in
|
|
348
|
-
* the data structure.
|
|
349
|
-
* @param {RedBlackTreeNode<K, V>} newNode - The `newNode` parameter is of type `RedBlackTreeNode<K, V>`, which represents a node in a
|
|
350
|
-
* data structure.
|
|
351
|
-
* @returns The method is returning the result of calling the `_replaceNode` method from the
|
|
352
|
-
* superclass, with the `oldNode` and `newNode` parameters.
|
|
353
|
-
*/
|
|
354
295
|
_replaceNode(oldNode, newNode) {
|
|
355
296
|
newNode.color = oldNode.color;
|
|
356
297
|
return super._replaceNode(oldNode, newNode);
|
|
357
298
|
}
|
|
358
299
|
/**
|
|
359
|
-
*
|
|
360
|
-
*
|
|
361
|
-
*
|
|
362
|
-
*
|
|
363
|
-
* maintain the red-black tree properties.
|
|
364
|
-
* @param {RedBlackTreeNode<K, V>} node - The `node` parameter represents the node that needs to be inserted into the
|
|
365
|
-
* binary search tree.
|
|
366
|
-
* @returns a string value indicating the result of the insertion operation. It can return either
|
|
367
|
-
* 'UPDATED' if the node with the same key already exists and was updated, or 'CREATED' if a new node
|
|
368
|
-
* was created and inserted into the tree.
|
|
300
|
+
* (Protected) Standard BST insert followed by red-black fix-up.
|
|
301
|
+
* @remarks Time O(log n), Space O(1)
|
|
302
|
+
* @param node - Node to insert.
|
|
303
|
+
* @returns Status string: 'CREATED' or 'UPDATED'.
|
|
369
304
|
*/
|
|
370
305
|
_insert(node) {
|
|
371
306
|
let current = this.root;
|
|
@@ -401,13 +336,11 @@ export class RedBlackTree extends BST {
|
|
|
401
336
|
return 'CREATED';
|
|
402
337
|
}
|
|
403
338
|
/**
|
|
404
|
-
*
|
|
405
|
-
*
|
|
406
|
-
*
|
|
407
|
-
*
|
|
408
|
-
* @
|
|
409
|
-
* @param {RedBlackTreeNode<K, V> | undefined} v - The parameter `v` is of type `RedBlackTreeNode<K, V> | undefined`, which means it can
|
|
410
|
-
* either be a `RedBlackTreeNode<K, V>` object or `undefined`.
|
|
339
|
+
* (Protected) Transplant a subtree in place of another during deletion.
|
|
340
|
+
* @remarks Time O(1), Space O(1)
|
|
341
|
+
* @param u - Node to replace.
|
|
342
|
+
* @param v - Replacement subtree root (may be undefined).
|
|
343
|
+
* @returns void
|
|
411
344
|
*/
|
|
412
345
|
_transplant(u, v) {
|
|
413
346
|
if (!u.parent) {
|
|
@@ -424,37 +357,26 @@ export class RedBlackTree extends BST {
|
|
|
424
357
|
}
|
|
425
358
|
}
|
|
426
359
|
/**
|
|
427
|
-
*
|
|
428
|
-
*
|
|
429
|
-
*
|
|
430
|
-
*
|
|
431
|
-
* @param {RedBlackTreeNode<K, V> | undefined} z - The parameter `z` represents a node in the Red-Black Tree data
|
|
432
|
-
* structure. It can either be a valid node or `undefined`.
|
|
360
|
+
* (Protected) Restore red-black properties after insertion (recolor/rotate).
|
|
361
|
+
* @remarks Time O(log n), Space O(1)
|
|
362
|
+
* @param z - Recently inserted node.
|
|
363
|
+
* @returns void
|
|
433
364
|
*/
|
|
434
365
|
_insertFixup(z) {
|
|
435
|
-
// Continue fixing the tree as long as the parent of z is red
|
|
436
366
|
while (z?.parent?.color === 'RED') {
|
|
437
|
-
// Check if the parent of z is the left child of its parent
|
|
438
367
|
if (z.parent === z.parent.parent?.left) {
|
|
439
|
-
// Case 1: The uncle (y) of z is red
|
|
440
368
|
const y = z.parent.parent.right;
|
|
441
369
|
if (y?.color === 'RED') {
|
|
442
|
-
// Set colors to restore properties of Red-Black Tree
|
|
443
370
|
z.parent.color = 'BLACK';
|
|
444
371
|
y.color = 'BLACK';
|
|
445
372
|
z.parent.parent.color = 'RED';
|
|
446
|
-
// Move up the tree to continue fixing
|
|
447
373
|
z = z.parent.parent;
|
|
448
374
|
}
|
|
449
375
|
else {
|
|
450
|
-
// Case 2: The uncle (y) of z is black, and z is a right child
|
|
451
376
|
if (z === z.parent.right) {
|
|
452
|
-
// Perform a left rotation to transform the case into Case 3
|
|
453
377
|
z = z.parent;
|
|
454
378
|
this._leftRotate(z);
|
|
455
379
|
}
|
|
456
|
-
// Case 3: The uncle (y) of z is black, and z is a left child
|
|
457
|
-
// Adjust colors and perform a right rotation
|
|
458
380
|
if (z && this.isRealNode(z.parent) && this.isRealNode(z.parent.parent)) {
|
|
459
381
|
z.parent.color = 'BLACK';
|
|
460
382
|
z.parent.parent.color = 'RED';
|
|
@@ -463,8 +385,6 @@ export class RedBlackTree extends BST {
|
|
|
463
385
|
}
|
|
464
386
|
}
|
|
465
387
|
else {
|
|
466
|
-
// Symmetric case for the right child (left and right exchanged)
|
|
467
|
-
// Follow the same logic as above with left and right exchanged
|
|
468
388
|
const y = z?.parent?.parent?.left ?? undefined;
|
|
469
389
|
if (y?.color === 'RED') {
|
|
470
390
|
z.parent.color = 'BLACK';
|
|
@@ -485,51 +405,41 @@ export class RedBlackTree extends BST {
|
|
|
485
405
|
}
|
|
486
406
|
}
|
|
487
407
|
}
|
|
488
|
-
// Ensure that the root is black after fixing
|
|
489
408
|
if (this.isRealNode(this._root))
|
|
490
409
|
this._root.color = 'BLACK';
|
|
491
410
|
}
|
|
492
411
|
/**
|
|
493
|
-
*
|
|
494
|
-
*
|
|
495
|
-
*
|
|
496
|
-
*
|
|
497
|
-
* the colors and performing rotations.
|
|
498
|
-
* @param {RedBlackTreeNode<K, V> | undefined} node - The `node` parameter represents a node in a binary tree. It can
|
|
499
|
-
* be either a valid node object or `undefined`.
|
|
500
|
-
* @returns The function does not return any value. It has a return type of `void`, which means it
|
|
501
|
-
* does not return anything.
|
|
412
|
+
* (Protected) Restore red-black properties after deletion (recolor/rotate).
|
|
413
|
+
* @remarks Time O(log n), Space O(1)
|
|
414
|
+
* @param node - Child that replaced the deleted node (may be undefined).
|
|
415
|
+
* @returns void
|
|
502
416
|
*/
|
|
503
417
|
_deleteFixup(node) {
|
|
504
|
-
// Early exit condition
|
|
505
418
|
if (!node || node === this.root || node.color === 'BLACK') {
|
|
506
419
|
if (node) {
|
|
507
|
-
node.color = 'BLACK';
|
|
420
|
+
node.color = 'BLACK';
|
|
508
421
|
}
|
|
509
422
|
return;
|
|
510
423
|
}
|
|
511
424
|
while (node && node !== this.root && node.color === 'BLACK') {
|
|
512
425
|
const parent = node.parent;
|
|
513
426
|
if (!parent) {
|
|
514
|
-
break;
|
|
427
|
+
break;
|
|
515
428
|
}
|
|
516
429
|
if (node === parent.left) {
|
|
517
430
|
let sibling = parent.right;
|
|
518
|
-
// Cases 1 and 2: Sibling is red or both children of sibling are black
|
|
519
431
|
if (sibling?.color === 'RED') {
|
|
520
432
|
sibling.color = 'BLACK';
|
|
521
433
|
parent.color = 'RED';
|
|
522
434
|
this._leftRotate(parent);
|
|
523
435
|
sibling = parent.right;
|
|
524
436
|
}
|
|
525
|
-
// Case 3: Sibling's left child is black
|
|
526
437
|
if ((sibling?.left?.color ?? 'BLACK') === 'BLACK') {
|
|
527
438
|
if (sibling)
|
|
528
439
|
sibling.color = 'RED';
|
|
529
440
|
node = parent;
|
|
530
441
|
}
|
|
531
442
|
else {
|
|
532
|
-
// Case 4: Adjust colors and perform a right rotation
|
|
533
443
|
if (sibling?.left)
|
|
534
444
|
sibling.left.color = 'BLACK';
|
|
535
445
|
if (sibling)
|
|
@@ -540,9 +450,7 @@ export class RedBlackTree extends BST {
|
|
|
540
450
|
}
|
|
541
451
|
}
|
|
542
452
|
else {
|
|
543
|
-
// Symmetric case for the right child (left and right exchanged)
|
|
544
453
|
let sibling = parent.left;
|
|
545
|
-
// Cases 1 and 2: Sibling is red or both children of sibling are black
|
|
546
454
|
if (sibling?.color === 'RED') {
|
|
547
455
|
sibling.color = 'BLACK';
|
|
548
456
|
if (parent)
|
|
@@ -551,14 +459,12 @@ export class RedBlackTree extends BST {
|
|
|
551
459
|
if (parent)
|
|
552
460
|
sibling = parent.left;
|
|
553
461
|
}
|
|
554
|
-
// Case 3: Sibling's left child is black
|
|
555
462
|
if ((sibling?.right?.color ?? 'BLACK') === 'BLACK') {
|
|
556
463
|
if (sibling)
|
|
557
464
|
sibling.color = 'RED';
|
|
558
465
|
node = parent;
|
|
559
466
|
}
|
|
560
467
|
else {
|
|
561
|
-
// Case 4: Adjust colors and perform a left rotation
|
|
562
468
|
if (sibling?.right)
|
|
563
469
|
sibling.right.color = 'BLACK';
|
|
564
470
|
if (sibling)
|
|
@@ -570,19 +476,15 @@ export class RedBlackTree extends BST {
|
|
|
570
476
|
}
|
|
571
477
|
}
|
|
572
478
|
}
|
|
573
|
-
// Ensure that the final node (possibly the root) is black
|
|
574
479
|
if (node) {
|
|
575
480
|
node.color = 'BLACK';
|
|
576
481
|
}
|
|
577
482
|
}
|
|
578
483
|
/**
|
|
579
|
-
*
|
|
580
|
-
*
|
|
581
|
-
*
|
|
582
|
-
*
|
|
583
|
-
* @param {RedBlackTreeNode<K, V> | undefined} x - The parameter `x` is of type `RedBlackTreeNode<K, V> | undefined`. It represents a
|
|
584
|
-
* node in a binary tree or `undefined` if there is no node.
|
|
585
|
-
* @returns void, which means it does not return any value.
|
|
484
|
+
* (Protected) Perform a left rotation around x.
|
|
485
|
+
* @remarks Time O(1), Space O(1)
|
|
486
|
+
* @param x - Pivot node to rotate around.
|
|
487
|
+
* @returns void
|
|
586
488
|
*/
|
|
587
489
|
_leftRotate(x) {
|
|
588
490
|
if (!x || !x.right) {
|
|
@@ -607,13 +509,10 @@ export class RedBlackTree extends BST {
|
|
|
607
509
|
x.parent = y;
|
|
608
510
|
}
|
|
609
511
|
/**
|
|
610
|
-
*
|
|
611
|
-
*
|
|
612
|
-
*
|
|
613
|
-
*
|
|
614
|
-
* @param {RedBlackTreeNode<K, V> | undefined} y - The parameter `y` is of type `RedBlackTreeNode<K, V> | undefined`. It represents a
|
|
615
|
-
* node in a binary tree or `undefined` if there is no node.
|
|
616
|
-
* @returns void, which means it does not return any value.
|
|
512
|
+
* (Protected) Perform a right rotation around y.
|
|
513
|
+
* @remarks Time O(1), Space O(1)
|
|
514
|
+
* @param y - Pivot node to rotate around.
|
|
515
|
+
* @returns void
|
|
617
516
|
*/
|
|
618
517
|
_rightRotate(y) {
|
|
619
518
|
if (!y || !y.left) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"red-black-tree.js","sourceRoot":"","sources":["../../../../src/data-structures/binary-tree/red-black-tree.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"red-black-tree.js","sourceRoot":"","sources":["../../../../src/data-structures/binary-tree/red-black-tree.ts"],"names":[],"mappings":"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"}
|