@raikuxq/alg-ds 1.1.3 → 1.1.4

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 (161) hide show
  1. package/lib/algorithms/binary-search.d.ts +5 -0
  2. package/lib/algorithms/binary-search.js +27 -0
  3. package/lib/algorithms/factorial.d.ts +9 -0
  4. package/lib/algorithms/factorial.js +17 -0
  5. package/lib/algorithms/fibonacci.d.ts +9 -0
  6. package/lib/algorithms/fibonacci.js +17 -0
  7. package/lib/algorithms/memoize.d.ts +5 -0
  8. package/lib/algorithms/memoize.js +22 -0
  9. package/lib/algorithms/sorts/bubble-sort.d.ts +9 -0
  10. package/lib/algorithms/sorts/bubble-sort.js +23 -0
  11. package/lib/algorithms/sorts/insertion-sort.d.ts +9 -0
  12. package/lib/algorithms/sorts/insertion-sort.js +25 -0
  13. package/lib/algorithms/sorts/merge-sort.d.ts +9 -0
  14. package/lib/algorithms/sorts/merge-sort.js +61 -0
  15. package/lib/algorithms/sorts/quick-sort.d.ts +9 -0
  16. package/lib/algorithms/sorts/quick-sort.js +45 -0
  17. package/lib/algorithms/sorts/select-sort.d.ts +9 -0
  18. package/lib/algorithms/sorts/select-sort.js +20 -0
  19. package/lib/algorithms/transpose-matrix.d.ts +5 -0
  20. package/lib/algorithms/transpose-matrix.js +20 -0
  21. package/lib/constants.d.ts +2 -0
  22. package/lib/constants.js +6 -0
  23. package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.d.ts +15 -0
  24. package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.js +53 -0
  25. package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.d.ts +60 -0
  26. package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.js +36 -0
  27. package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.d.ts +13 -0
  28. package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.js +59 -0
  29. package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.d.ts +70 -0
  30. package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.js +268 -0
  31. package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.d.ts +16 -0
  32. package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.js +70 -0
  33. package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.d.ts +57 -0
  34. package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.js +234 -0
  35. package/lib/data-structures/Graph/AbstractGraph.d.ts +84 -0
  36. package/lib/data-structures/Graph/AbstractGraph.js +141 -0
  37. package/lib/data-structures/Graph/DirectedGraph.d.ts +24 -0
  38. package/lib/data-structures/Graph/DirectedGraph.js +85 -0
  39. package/lib/data-structures/Graph/GraphEdge.d.ts +16 -0
  40. package/lib/data-structures/Graph/GraphEdge.js +43 -0
  41. package/lib/data-structures/Graph/UndirectedGraph.d.ts +28 -0
  42. package/lib/data-structures/Graph/UndirectedGraph.js +102 -0
  43. package/lib/data-structures/Graph/demo/generateRandomGraph.d.ts +4 -0
  44. package/lib/data-structures/Graph/demo/generateRandomGraph.js +72 -0
  45. package/lib/data-structures/Graph/iterator/AbstractGraphIterator.d.ts +35 -0
  46. package/lib/data-structures/Graph/iterator/AbstractGraphIterator.js +90 -0
  47. package/lib/data-structures/Graph/iterator/GraphIteratorBFS.d.ts +28 -0
  48. package/lib/data-structures/Graph/iterator/GraphIteratorBFS.js +70 -0
  49. package/lib/data-structures/Graph/iterator/GraphIteratorDFS.d.ts +28 -0
  50. package/lib/data-structures/Graph/iterator/GraphIteratorDFS.js +70 -0
  51. package/lib/data-structures/Graph/iterator/GraphIteratorDijkstra.d.ts +32 -0
  52. package/lib/data-structures/Graph/iterator/GraphIteratorDijkstra.js +99 -0
  53. package/lib/data-structures/Graph/presenter/presenterAdjacencyLists.d.ts +19 -0
  54. package/lib/data-structures/Graph/presenter/presenterAdjacencyLists.js +28 -0
  55. package/lib/data-structures/Graph/presenter/presenterAdjacencyMatrix.d.ts +32 -0
  56. package/lib/data-structures/Graph/presenter/presenterAdjacencyMatrix.js +48 -0
  57. package/lib/data-structures/Graph/searching/hasPath.d.ts +9 -0
  58. package/lib/data-structures/Graph/searching/hasPath.js +29 -0
  59. package/lib/data-structures/Graph/searching/shortestPath.d.ts +9 -0
  60. package/lib/data-structures/Graph/searching/shortestPath.js +29 -0
  61. package/lib/data-structures/Graph/strategy/BFSIterationStrategy.d.ts +6 -0
  62. package/lib/data-structures/Graph/strategy/BFSIterationStrategy.js +13 -0
  63. package/lib/data-structures/Graph/strategy/DFSIterationStrategy.d.ts +6 -0
  64. package/lib/data-structures/Graph/strategy/DFSIterationStrategy.js +13 -0
  65. package/lib/data-structures/Graph/strategy/DijkstraIterationStrategy.d.ts +6 -0
  66. package/lib/data-structures/Graph/strategy/DijkstraIterationStrategy.js +13 -0
  67. package/lib/data-structures/Graph/transposing/transposeDirectedGraph.d.ts +2 -0
  68. package/lib/data-structures/Graph/transposing/transposeDirectedGraph.js +14 -0
  69. package/lib/data-structures/HashTable/HashTable.d.ts +73 -0
  70. package/lib/data-structures/HashTable/HashTable.js +169 -0
  71. package/lib/data-structures/HashTable/HashTableNode.d.ts +11 -0
  72. package/lib/data-structures/HashTable/HashTableNode.js +39 -0
  73. package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.d.ts +125 -0
  74. package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.js +236 -0
  75. package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.d.ts +20 -0
  76. package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.js +41 -0
  77. package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.d.ts +48 -0
  78. package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.js +150 -0
  79. package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.d.ts +25 -0
  80. package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.js +65 -0
  81. package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.d.ts +52 -0
  82. package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.js +137 -0
  83. package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.d.ts +7 -0
  84. package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.js +29 -0
  85. package/lib/data-structures/LoopedArray/LoopedArray.d.ts +86 -0
  86. package/lib/data-structures/LoopedArray/LoopedArray.js +161 -0
  87. package/lib/data-structures/Queue/Queue.d.ts +50 -0
  88. package/lib/data-structures/Queue/Queue.js +83 -0
  89. package/lib/data-structures/Stack/Stack.d.ts +50 -0
  90. package/lib/data-structures/Stack/Stack.js +83 -0
  91. package/lib/exports/algorithms.d.ts +16 -0
  92. package/lib/exports/algorithms.js +36 -0
  93. package/lib/exports/constants.d.ts +2 -0
  94. package/lib/exports/constants.js +7 -0
  95. package/lib/exports/data-structures.d.ts +11 -0
  96. package/lib/exports/data-structures.js +24 -0
  97. package/lib/exports/helpers.d.ts +6 -0
  98. package/lib/exports/helpers.js +14 -0
  99. package/lib/exports/sorts.d.ts +6 -0
  100. package/lib/exports/sorts.js +14 -0
  101. package/lib/exports/utils.d.ts +3 -0
  102. package/lib/exports/utils.js +14 -0
  103. package/lib/exports.d.ts +44 -0
  104. package/lib/exports.js +89 -0
  105. package/lib/helpers/createBinaryTree.d.ts +6 -0
  106. package/lib/helpers/createBinaryTree.js +22 -0
  107. package/lib/helpers/createGraph.d.ts +6 -0
  108. package/lib/helpers/createGraph.js +24 -0
  109. package/lib/helpers/createGraphFromMatrix.d.ts +7 -0
  110. package/lib/helpers/createGraphFromMatrix.js +37 -0
  111. package/lib/helpers/createLinkedList.d.ts +3 -0
  112. package/lib/helpers/createLinkedList.js +21 -0
  113. package/lib/index.d.ts +3 -0
  114. package/lib/index.js +6 -0
  115. package/lib/types/ArrayMatrix.d.ts +1 -0
  116. package/lib/types/ArrayMatrix.js +3 -0
  117. package/lib/types/EnumBinarySearchTreeType.d.ts +4 -0
  118. package/lib/types/EnumBinarySearchTreeType.js +9 -0
  119. package/lib/types/EnumGraphType.d.ts +4 -0
  120. package/lib/types/EnumGraphType.js +9 -0
  121. package/lib/types/EnumLinkedListType.d.ts +4 -0
  122. package/lib/types/EnumLinkedListType.js +9 -0
  123. package/lib/types/EnumRandomGenerationFormat.d.ts +4 -0
  124. package/lib/types/EnumRandomGenerationFormat.js +9 -0
  125. package/lib/types/EnumTreeTraversalType.d.ts +5 -0
  126. package/lib/types/EnumTreeTraversalType.js +10 -0
  127. package/lib/types/FnCompareTwo.d.ts +1 -0
  128. package/lib/types/FnCompareTwo.js +3 -0
  129. package/lib/types/FnToMemoize.d.ts +1 -0
  130. package/lib/types/FnToMemoize.js +3 -0
  131. package/lib/types/IArrayFacade.d.ts +4 -0
  132. package/lib/types/IArrayFacade.js +3 -0
  133. package/lib/types/IBiDirectIterable.d.ts +5 -0
  134. package/lib/types/IBiDirectIterable.js +3 -0
  135. package/lib/types/IBiDirectIterator.d.ts +11 -0
  136. package/lib/types/IBiDirectIterator.js +3 -0
  137. package/lib/types/IBinaryTree.d.ts +12 -0
  138. package/lib/types/IBinaryTree.js +3 -0
  139. package/lib/types/IConvertableToArray.d.ts +4 -0
  140. package/lib/types/IConvertableToArray.js +3 -0
  141. package/lib/types/IGraph.d.ts +14 -0
  142. package/lib/types/IGraph.js +3 -0
  143. package/lib/types/IGraphIterationStrategy.d.ts +5 -0
  144. package/lib/types/IGraphIterationStrategy.js +3 -0
  145. package/lib/types/IGraphIterator.d.ts +11 -0
  146. package/lib/types/IGraphIterator.js +3 -0
  147. package/lib/types/IIterable.d.ts +4 -0
  148. package/lib/types/IIterable.js +3 -0
  149. package/lib/types/IIterator.d.ts +14 -0
  150. package/lib/types/IIterator.js +3 -0
  151. package/lib/types/IKeyValueStorage.d.ts +8 -0
  152. package/lib/types/IKeyValueStorage.js +3 -0
  153. package/lib/types/ILinearStorage.d.ts +11 -0
  154. package/lib/types/ILinearStorage.js +3 -0
  155. package/lib/types/ILinearStorageRA.d.ts +13 -0
  156. package/lib/types/ILinearStorageRA.js +3 -0
  157. package/lib/types/ILinkedList.d.ts +4 -0
  158. package/lib/types/ILinkedList.js +3 -0
  159. package/lib/utils.d.ts +29 -0
  160. package/lib/utils.js +95 -0
  161. package/package.json +1 -1
@@ -0,0 +1,70 @@
1
+ import { FnCompareTwo } from "../../../types/FnCompareTwo";
2
+ import { EnumTreeTraversalType } from "../../../types/EnumTreeTraversalType";
3
+ import IBinaryTree from "../../../types/IBinaryTree";
4
+ import AbstractBinaryTree from "../AbstractBinaryTree/AbstractBinaryTree";
5
+ import BinarySearchNode from "./BinarySearchNode";
6
+ /**
7
+ * Unbalanced binary search tree implementation
8
+ */
9
+ export default class BinarySearchTree<T> extends AbstractBinaryTree<T> {
10
+ /**
11
+ * Override types
12
+ */
13
+ protected _head: BinarySearchNode<T> | null;
14
+ /**
15
+ * @inheritDoc
16
+ */
17
+ constructor(fnCompare?: FnCompareTwo<T>);
18
+ /**
19
+ *
20
+ * @throws when head is empty
21
+ */
22
+ protected checkIsEmpty(): void;
23
+ /**
24
+ * Will update left and right links parent with current node
25
+ */
26
+ protected updateLeftRightParents(node: BinarySearchNode<T>): void;
27
+ /**
28
+ * Will return node instance by its data
29
+ */
30
+ protected findNode(value: T): BinarySearchNode<T> | null;
31
+ /**
32
+ * @inheritDoc
33
+ */
34
+ protected insertToLeaf(createdNode: BinarySearchNode<T>): void;
35
+ /**
36
+ * Will join two trees into one */
37
+ protected join(treeLeft: BinarySearchNode<T> | null, treeRight: BinarySearchNode<T> | null): BinarySearchNode<T> | null;
38
+ /**
39
+ * @inheritDoc
40
+ */
41
+ max(): T;
42
+ /**
43
+ * @inheritDoc
44
+ */
45
+ min(): T;
46
+ /**
47
+ * @inheritDoc
48
+ */
49
+ insert(value: T): void;
50
+ /**
51
+ * @inheritDoc
52
+ */
53
+ has(value: T): boolean;
54
+ /**
55
+ * @inheritDoc
56
+ */
57
+ delete(value: T): void;
58
+ /**
59
+ * @inheritDoc
60
+ */
61
+ subtree(value: T): IBinaryTree<T>;
62
+ /**
63
+ * @inheritDoc
64
+ */
65
+ traverse(type: EnumTreeTraversalType, from?: T): Array<T>;
66
+ /**
67
+ * Calc max height of the largest branch of the tree
68
+ */
69
+ height(): number;
70
+ }
@@ -0,0 +1,268 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ extendStatics(d, b);
11
+ function __() { this.constructor = d; }
12
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
13
+ };
14
+ })();
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ var EnumTreeTraversalType_1 = require("../../../types/EnumTreeTraversalType");
17
+ var AbstractBinaryTree_1 = require("../AbstractBinaryTree/AbstractBinaryTree");
18
+ var BinarySearchNode_1 = require("./BinarySearchNode");
19
+ var Queue_1 = require("../../Queue/Queue");
20
+ /**
21
+ * Unbalanced binary search tree implementation
22
+ */
23
+ var BinarySearchTree = /** @class */ (function (_super) {
24
+ __extends(BinarySearchTree, _super);
25
+ /**
26
+ * @inheritDoc
27
+ */
28
+ function BinarySearchTree(fnCompare) {
29
+ var _this = _super.call(this, fnCompare) || this;
30
+ _this._head = null;
31
+ return _this;
32
+ }
33
+ /**
34
+ *
35
+ * @throws when head is empty
36
+ */
37
+ BinarySearchTree.prototype.checkIsEmpty = function () {
38
+ if (this._head === null) {
39
+ throw new Error("Tree is empty");
40
+ }
41
+ };
42
+ /**
43
+ * Will update left and right links parent with current node
44
+ */
45
+ BinarySearchTree.prototype.updateLeftRightParents = function (node) {
46
+ if (node.left && node.left.parent !== node) {
47
+ node.left.parent = node;
48
+ }
49
+ if (node.right && node.right.parent !== node) {
50
+ node.right.parent = node;
51
+ }
52
+ };
53
+ /**
54
+ * Will return node instance by its data
55
+ */
56
+ BinarySearchTree.prototype.findNode = function (value) {
57
+ var current = this._head;
58
+ while (current && current.data !== value) {
59
+ current = this.compare(current.data, value)
60
+ ? current.left
61
+ : current.right;
62
+ }
63
+ return current;
64
+ };
65
+ /**
66
+ * @inheritDoc
67
+ */
68
+ BinarySearchTree.prototype.insertToLeaf = function (createdNode) {
69
+ var parent = null;
70
+ var current = this._head;
71
+ while (current) {
72
+ parent = current;
73
+ current = this.compare(current.data, createdNode.data)
74
+ ? current.left
75
+ : current.right;
76
+ }
77
+ createdNode.parent = parent;
78
+ if (parent === null) {
79
+ this._head = createdNode;
80
+ }
81
+ else {
82
+ if (this.compare(parent.data, createdNode.data)) {
83
+ parent.left = createdNode;
84
+ }
85
+ else {
86
+ parent.right = createdNode;
87
+ }
88
+ }
89
+ this._length++;
90
+ };
91
+ /**
92
+ * Will join two trees into one */
93
+ BinarySearchTree.prototype.join = function (treeLeft, treeRight) {
94
+ if (treeLeft === null) {
95
+ return treeRight;
96
+ }
97
+ if (treeRight === null) {
98
+ return treeLeft;
99
+ }
100
+ treeRight.left = this.join(treeLeft, treeRight.left);
101
+ if (treeRight.left) {
102
+ this.updateLeftRightParents(treeRight);
103
+ }
104
+ return treeRight;
105
+ };
106
+ /**
107
+ * @inheritDoc
108
+ */
109
+ BinarySearchTree.prototype.max = function () {
110
+ this.checkIsEmpty();
111
+ var currentNode = this._head;
112
+ while (currentNode === null || currentNode === void 0 ? void 0 : currentNode.right) {
113
+ currentNode = currentNode.right;
114
+ }
115
+ return currentNode.data;
116
+ };
117
+ /**
118
+ * @inheritDoc
119
+ */
120
+ BinarySearchTree.prototype.min = function () {
121
+ this.checkIsEmpty();
122
+ var currentNode = this._head;
123
+ while (currentNode === null || currentNode === void 0 ? void 0 : currentNode.left) {
124
+ currentNode = currentNode.left;
125
+ }
126
+ return currentNode.data;
127
+ };
128
+ /**
129
+ * @inheritDoc
130
+ */
131
+ BinarySearchTree.prototype.insert = function (value) {
132
+ if (this.has(value)) {
133
+ throw new Error("Node already exists");
134
+ }
135
+ var createdNode = new BinarySearchNode_1.default(value);
136
+ this.insertToLeaf(createdNode);
137
+ };
138
+ /**
139
+ * @inheritDoc
140
+ */
141
+ BinarySearchTree.prototype.has = function (value) {
142
+ var current = this.findNode(value);
143
+ return (current === null || current === void 0 ? void 0 : current.data) === value;
144
+ };
145
+ /**
146
+ * @inheritDoc
147
+ */
148
+ BinarySearchTree.prototype.delete = function (value) {
149
+ var _this = this;
150
+ if (!this.has(value)) {
151
+ throw new Error("Value does not exist in the tree");
152
+ }
153
+ var recursiveDelete = function (node, value) {
154
+ if (node === null) {
155
+ return node;
156
+ }
157
+ if (node.data === value) {
158
+ var updatedNode = _this.join(node.left, node.right);
159
+ if (updatedNode) {
160
+ updatedNode.parent = node.parent;
161
+ }
162
+ return updatedNode;
163
+ }
164
+ else if (_this.compare(node.data, value)) {
165
+ node.left = recursiveDelete(node.left, value);
166
+ }
167
+ else {
168
+ node.right = recursiveDelete(node.right, value);
169
+ }
170
+ _this.updateLeftRightParents(node);
171
+ return node;
172
+ };
173
+ this._head = recursiveDelete(this._head, value);
174
+ this._length--;
175
+ };
176
+ /**
177
+ * @inheritDoc
178
+ */
179
+ BinarySearchTree.prototype.subtree = function (value) {
180
+ var tree = new BinarySearchTree();
181
+ var node = this.findNode(value);
182
+ var queue = new Queue_1.default();
183
+ var traverse = [];
184
+ queue.push(node);
185
+ while (!queue.isEmpty()) {
186
+ var currentNode = queue.pop();
187
+ traverse.push(currentNode);
188
+ if (currentNode === null || currentNode === void 0 ? void 0 : currentNode.left) {
189
+ queue.push(currentNode.left);
190
+ }
191
+ if (currentNode === null || currentNode === void 0 ? void 0 : currentNode.right) {
192
+ queue.push(currentNode.right);
193
+ }
194
+ }
195
+ traverse.forEach(function (elem) {
196
+ if (elem !== null) {
197
+ tree.insert(elem.data);
198
+ }
199
+ });
200
+ return tree;
201
+ };
202
+ /**
203
+ * @inheritDoc
204
+ */
205
+ BinarySearchTree.prototype.traverse = function (type, from) {
206
+ this.checkIsEmpty();
207
+ var array = new Array(this.length());
208
+ var root = from !== undefined ? this.findNode(from) : this._head;
209
+ var storeInOrder = function (node) {
210
+ if (node === null) {
211
+ return;
212
+ }
213
+ storeInOrder(node.left);
214
+ array.push(node.data);
215
+ storeInOrder(node.right);
216
+ };
217
+ var storePostOrder = function (node) {
218
+ if (node === null) {
219
+ return;
220
+ }
221
+ storeInOrder(node.left);
222
+ storeInOrder(node.right);
223
+ array.push(node.data);
224
+ };
225
+ var storePreOrder = function (node) {
226
+ if (node === null) {
227
+ return;
228
+ }
229
+ array.push(node.data);
230
+ storeInOrder(node.left);
231
+ storeInOrder(node.right);
232
+ };
233
+ switch (type) {
234
+ case EnumTreeTraversalType_1.EnumTreeTraversalType.InOrder:
235
+ storeInOrder(root);
236
+ break;
237
+ case EnumTreeTraversalType_1.EnumTreeTraversalType.PostOrder:
238
+ storePostOrder(root);
239
+ break;
240
+ case EnumTreeTraversalType_1.EnumTreeTraversalType.PreOrder:
241
+ storePreOrder(root);
242
+ break;
243
+ }
244
+ return array.filter(function (item) { return item !== undefined; });
245
+ };
246
+ /**
247
+ * Calc max height of the largest branch of the tree
248
+ */
249
+ BinarySearchTree.prototype.height = function () {
250
+ var calcHeight = function (node) {
251
+ if (node === null)
252
+ return 0;
253
+ var left = node.left === null ? -1 : calcHeight(node.left);
254
+ var right = node.right === null ? -1 : calcHeight(node.right);
255
+ var max = left > right ? left : right;
256
+ return max + 1;
257
+ };
258
+ if (this._head === null) {
259
+ return 0;
260
+ }
261
+ else {
262
+ return calcHeight(this._head) + 1;
263
+ }
264
+ };
265
+ return BinarySearchTree;
266
+ }(AbstractBinaryTree_1.default));
267
+ exports.default = BinarySearchTree;
268
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmluYXJ5U2VhcmNoVHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0cnVjdHVyZXMvQmluYXJ5VHJlZS9CaW5hcnlTZWFyY2hUcmVlL0JpbmFyeVNlYXJjaFRyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsOEVBQTZFO0FBRTdFLCtFQUEwRTtBQUMxRSx1REFBa0Q7QUFDbEQsMkNBQXNDO0FBRXRDOztHQUVHO0FBQ0g7SUFBaUQsb0NBQXFCO0lBTXBFOztPQUVHO0lBQ0gsMEJBQW1CLFNBQTJCO1FBQTlDLFlBQ0Usa0JBQU0sU0FBUyxDQUFDLFNBRWpCO1FBREMsS0FBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7O0lBQ3BCLENBQUM7SUFFRDs7O09BR0c7SUFDTyx1Q0FBWSxHQUF0QjtRQUNFLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNsQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNPLGlEQUFzQixHQUFoQyxVQUFpQyxJQUF5QjtRQUN4RCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFO1lBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN6QjtRQUNELElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7WUFDNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ08sbUNBQVEsR0FBbEIsVUFBbUIsS0FBUTtRQUN6QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBRXpCLE9BQU8sT0FBTyxJ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
@@ -0,0 +1,16 @@
1
+ import BinarySearchNode from "../BinarySearchTree/BinarySearchNode";
2
+ export default class RandBinarySearchNode<T> extends BinarySearchNode<T> {
3
+ private _rank;
4
+ protected _left: RandBinarySearchNode<T> | null;
5
+ protected _right: RandBinarySearchNode<T> | null;
6
+ protected _parent: RandBinarySearchNode<T> | null;
7
+ constructor(initialData: T);
8
+ get rank(): number;
9
+ set rank(value: number);
10
+ get left(): RandBinarySearchNode<T> | null;
11
+ set left(value: RandBinarySearchNode<T> | null);
12
+ get right(): RandBinarySearchNode<T> | null;
13
+ set right(value: RandBinarySearchNode<T> | null);
14
+ get parent(): RandBinarySearchNode<T> | null;
15
+ set parent(value: RandBinarySearchNode<T> | null);
16
+ }
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ extendStatics(d, b);
11
+ function __() { this.constructor = d; }
12
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
13
+ };
14
+ })();
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ var BinarySearchNode_1 = require("../BinarySearchTree/BinarySearchNode");
17
+ var RandBinarySearchNode = /** @class */ (function (_super) {
18
+ __extends(RandBinarySearchNode, _super);
19
+ function RandBinarySearchNode(initialData) {
20
+ var _this = _super.call(this, initialData) || this;
21
+ _this._rank = 0;
22
+ _this._left = null;
23
+ _this._right = null;
24
+ _this._parent = null;
25
+ return _this;
26
+ }
27
+ Object.defineProperty(RandBinarySearchNode.prototype, "rank", {
28
+ get: function () {
29
+ return this._rank;
30
+ },
31
+ set: function (value) {
32
+ this._rank = value;
33
+ },
34
+ enumerable: false,
35
+ configurable: true
36
+ });
37
+ Object.defineProperty(RandBinarySearchNode.prototype, "left", {
38
+ get: function () {
39
+ return this._left;
40
+ },
41
+ set: function (value) {
42
+ this._left = value;
43
+ },
44
+ enumerable: false,
45
+ configurable: true
46
+ });
47
+ Object.defineProperty(RandBinarySearchNode.prototype, "right", {
48
+ get: function () {
49
+ return this._right;
50
+ },
51
+ set: function (value) {
52
+ this._right = value;
53
+ },
54
+ enumerable: false,
55
+ configurable: true
56
+ });
57
+ Object.defineProperty(RandBinarySearchNode.prototype, "parent", {
58
+ get: function () {
59
+ return this._parent;
60
+ },
61
+ set: function (value) {
62
+ this._parent = value;
63
+ },
64
+ enumerable: false,
65
+ configurable: true
66
+ });
67
+ return RandBinarySearchNode;
68
+ }(BinarySearchNode_1.default));
69
+ exports.default = RandBinarySearchNode;
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFuZEJpbmFyeVNlYXJjaE5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YS1zdHJ1Y3R1cmVzL0JpbmFyeVRyZWUvUmFuZEJpbmFyeVNlYXJjaFRyZWUvUmFuZEJpbmFyeVNlYXJjaE5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseUVBQW9FO0FBRXBFO0lBQXFELHdDQUFtQjtJQU10RSw4QkFBbUIsV0FBYztRQUFqQyxZQUNFLGtCQUFNLFdBQVcsQ0FBQyxTQUtuQjtRQUpDLEtBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsS0FBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsS0FBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsS0FBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7O0lBQ3RCLENBQUM7SUFFRCxzQkFBVyxzQ0FBSTthQUFmO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3BCLENBQUM7YUFFRCxVQUFnQixLQUFhO1lBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLENBQUM7OztPQUpBO0lBTUQsc0JBQVcsc0NBQUk7YUFBZjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNwQixDQUFDO2FBRUQsVUFBZ0IsS0FBcUM7WUFDbkQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDckIsQ0FBQzs7O09BSkE7SUFNRCxzQkFBVyx1Q0FBSzthQUFoQjtZQUNFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNyQixDQUFDO2FBRUQsVUFBaUIsS0FBcUM7WUFDcEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDdEIsQ0FBQzs7O09BSkE7SUFNRCxzQkFBVyx3Q0FBTTthQUFqQjtZQUNFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN0QixDQUFDO2FBRUQsVUFBa0IsS0FBcUM7WUFDckQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQzs7O09BSkE7SUFLSCwyQkFBQztBQUFELENBQUMsQUE3Q0QsQ0FBcUQsMEJBQWdCLEdBNkNwRSJ9
@@ -0,0 +1,57 @@
1
+ import { FnCompareTwo } from "../../../types/FnCompareTwo";
2
+ import RandBinarySearchNode from "./RandBinarySearchNode";
3
+ import BinarySearchTree from "../BinarySearchTree/BinarySearchTree";
4
+ /**
5
+ * Randomized binary search tree implementation
6
+ */
7
+ export default class RandBinarySearchTree<T> extends BinarySearchTree<T> {
8
+ /**
9
+ * Override types
10
+ */
11
+ protected _head: RandBinarySearchNode<T> | null;
12
+ /**
13
+ * @inheritDoc
14
+ */
15
+ constructor(fnCompare?: FnCompareTwo<T>);
16
+ /**
17
+ * Will update node rank by summing left and right subtrees tanks and itself rank (1)
18
+ */
19
+ private updateRank;
20
+ /**
21
+ * Will set rank and parent attributes and update tree length
22
+ */
23
+ private addCreatedNode;
24
+ /**
25
+ * Will rotate node to the right side
26
+ */
27
+ private rotateNodeRight;
28
+ /**
29
+ * Will rotate node to the left side
30
+ */
31
+ private rotateNodeLeft;
32
+ /**
33
+ * @inheritDoc
34
+ */
35
+ protected join(treeLeft: RandBinarySearchNode<T> | null, treeRight: RandBinarySearchNode<T> | null): RandBinarySearchNode<T> | null;
36
+ /**
37
+ * @inheritDoc
38
+ */
39
+ protected updateLeftRightParents(node: RandBinarySearchNode<T>): void;
40
+ /**
41
+ * @inheritDoc
42
+ */
43
+ protected insertToRoot(createdNode: RandBinarySearchNode<T>, fromNode?: RandBinarySearchNode<T>): void;
44
+ /**
45
+ * @inheritDoc
46
+ */
47
+ protected insertRandomly(createdNode: RandBinarySearchNode<T>): void;
48
+ /**
49
+ * @inheritDoc
50
+ */
51
+ insert(value: T): void;
52
+ /**
53
+ * @inheritDoc
54
+ */
55
+ delete(value: T): void;
56
+ length(): number;
57
+ }