@raikuxq/alg-ds 1.1.6 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/README.md +71 -88
  2. package/lib/app/algorithms/binary-search.d.ts +5 -0
  3. package/lib/app/algorithms/binary-search.js +27 -0
  4. package/lib/app/algorithms/factorial.d.ts +9 -0
  5. package/lib/app/algorithms/factorial.js +17 -0
  6. package/lib/app/algorithms/fibonacci.d.ts +9 -0
  7. package/lib/app/algorithms/fibonacci.js +17 -0
  8. package/lib/app/algorithms/graph/iterator/AbstractGraphIterator.d.ts +35 -0
  9. package/lib/app/algorithms/graph/iterator/AbstractGraphIterator.js +83 -0
  10. package/lib/app/algorithms/graph/iterator/GraphIteratorBFS.d.ts +28 -0
  11. package/lib/app/algorithms/graph/iterator/GraphIteratorBFS.js +70 -0
  12. package/lib/app/algorithms/graph/iterator/GraphIteratorDFS.d.ts +28 -0
  13. package/lib/app/algorithms/graph/iterator/GraphIteratorDFS.js +70 -0
  14. package/lib/app/algorithms/graph/iterator/GraphIteratorDijkstra.d.ts +32 -0
  15. package/lib/app/algorithms/graph/iterator/GraphIteratorDijkstra.js +97 -0
  16. package/lib/app/algorithms/graph/iterator-strategy/BFSIterationStrategy.d.ts +6 -0
  17. package/lib/app/algorithms/graph/iterator-strategy/BFSIterationStrategy.js +13 -0
  18. package/lib/app/algorithms/graph/iterator-strategy/DFSIterationStrategy.d.ts +6 -0
  19. package/lib/app/algorithms/graph/iterator-strategy/DFSIterationStrategy.js +13 -0
  20. package/lib/app/algorithms/graph/iterator-strategy/DijkstraIterationStrategy.d.ts +6 -0
  21. package/lib/app/algorithms/graph/iterator-strategy/DijkstraIterationStrategy.js +13 -0
  22. package/lib/app/algorithms/graph/presenter/presenterAdjacencyLists.d.ts +19 -0
  23. package/lib/app/algorithms/graph/presenter/presenterAdjacencyLists.js +28 -0
  24. package/lib/app/algorithms/graph/presenter/presenterAdjacencyMatrix.d.ts +32 -0
  25. package/lib/app/algorithms/graph/presenter/presenterAdjacencyMatrix.js +48 -0
  26. package/lib/app/algorithms/graph/searching/hasPath.d.ts +9 -0
  27. package/lib/app/algorithms/graph/searching/hasPath.js +30 -0
  28. package/lib/app/algorithms/graph/searching/shortestPath.d.ts +9 -0
  29. package/lib/app/algorithms/graph/searching/shortestPath.js +30 -0
  30. package/lib/app/algorithms/graph/transposing/transposeDirectedGraph.d.ts +2 -0
  31. package/lib/app/algorithms/graph/transposing/transposeDirectedGraph.js +14 -0
  32. package/lib/app/algorithms/memoize.d.ts +5 -0
  33. package/lib/app/algorithms/memoize.js +22 -0
  34. package/lib/app/algorithms/sorts/bubble-sort.d.ts +9 -0
  35. package/lib/app/algorithms/sorts/bubble-sort.js +23 -0
  36. package/lib/app/algorithms/sorts/insertion-sort.d.ts +9 -0
  37. package/lib/app/algorithms/sorts/insertion-sort.js +25 -0
  38. package/lib/app/algorithms/sorts/merge-sort.d.ts +9 -0
  39. package/lib/app/algorithms/sorts/merge-sort.js +61 -0
  40. package/lib/app/algorithms/sorts/quick-sort.d.ts +9 -0
  41. package/lib/app/algorithms/sorts/quick-sort.js +45 -0
  42. package/lib/app/algorithms/sorts/select-sort.d.ts +9 -0
  43. package/lib/app/algorithms/sorts/select-sort.js +20 -0
  44. package/lib/app/algorithms/transpose-matrix.d.ts +5 -0
  45. package/lib/app/algorithms/transpose-matrix.js +18 -0
  46. package/lib/app/constants.d.ts +2 -0
  47. package/lib/app/constants.js +6 -0
  48. package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.d.ts +15 -0
  49. package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.js +53 -0
  50. package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.d.ts +60 -0
  51. package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.js +36 -0
  52. package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.d.ts +13 -0
  53. package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.js +59 -0
  54. package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.d.ts +70 -0
  55. package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.js +271 -0
  56. package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.d.ts +16 -0
  57. package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.js +70 -0
  58. package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.d.ts +57 -0
  59. package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.js +235 -0
  60. package/lib/app/data-structures/BinaryTree/_helpers/createBinaryTree.d.ts +6 -0
  61. package/lib/app/data-structures/BinaryTree/_helpers/createBinaryTree.js +22 -0
  62. package/lib/app/data-structures/Graph/AbstractGraph.d.ts +84 -0
  63. package/lib/app/data-structures/Graph/AbstractGraph.js +143 -0
  64. package/lib/app/data-structures/Graph/DirectedGraph.d.ts +24 -0
  65. package/lib/app/data-structures/Graph/DirectedGraph.js +86 -0
  66. package/lib/app/data-structures/Graph/GraphEdge.d.ts +16 -0
  67. package/lib/app/data-structures/Graph/GraphEdge.js +43 -0
  68. package/lib/app/data-structures/Graph/UndirectedGraph.d.ts +28 -0
  69. package/lib/app/data-structures/Graph/UndirectedGraph.js +103 -0
  70. package/lib/app/data-structures/Graph/_helpers/createGraph.d.ts +6 -0
  71. package/lib/app/data-structures/Graph/_helpers/createGraph.js +22 -0
  72. package/lib/app/data-structures/Graph/_helpers/createGraphFromMatrix.d.ts +7 -0
  73. package/lib/app/data-structures/Graph/_helpers/createGraphFromMatrix.js +42 -0
  74. package/lib/app/data-structures/Graph/_helpers/generateRandomGraph.d.ts +4 -0
  75. package/lib/app/data-structures/Graph/_helpers/generateRandomGraph.js +67 -0
  76. package/lib/app/data-structures/HashTable/HashTable.d.ts +73 -0
  77. package/lib/app/data-structures/HashTable/HashTable.js +171 -0
  78. package/lib/app/data-structures/HashTable/HashTableNode.d.ts +11 -0
  79. package/lib/app/data-structures/HashTable/HashTableNode.js +39 -0
  80. package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.d.ts +125 -0
  81. package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.js +241 -0
  82. package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.d.ts +20 -0
  83. package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.js +41 -0
  84. package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.d.ts +48 -0
  85. package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.js +151 -0
  86. package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.d.ts +25 -0
  87. package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.js +65 -0
  88. package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.d.ts +52 -0
  89. package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.js +138 -0
  90. package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.d.ts +7 -0
  91. package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.js +29 -0
  92. package/lib/app/data-structures/LinkedList/_helpers/createLinkedList.d.ts +3 -0
  93. package/lib/app/data-structures/LinkedList/_helpers/createLinkedList.js +19 -0
  94. package/lib/app/data-structures/LoopedArray/LoopedArray.d.ts +83 -0
  95. package/lib/app/data-structures/LoopedArray/LoopedArray.js +169 -0
  96. package/lib/app/data-structures/Queue/Queue.d.ts +50 -0
  97. package/lib/app/data-structures/Queue/Queue.js +85 -0
  98. package/lib/app/data-structures/Stack/Stack.d.ts +50 -0
  99. package/lib/app/data-structures/Stack/Stack.js +85 -0
  100. package/lib/app/exceptions/CollectionIsEmptyException.d.ts +4 -0
  101. package/lib/app/exceptions/CollectionIsEmptyException.js +28 -0
  102. package/lib/app/exceptions/CollectionIsFullException.d.ts +4 -0
  103. package/lib/app/exceptions/CollectionIsFullException.js +28 -0
  104. package/lib/app/exceptions/IndexOutOfBoundsException.d.ts +4 -0
  105. package/lib/app/exceptions/IndexOutOfBoundsException.js +28 -0
  106. package/lib/app/exceptions/IsAlreadyExistsException.d.ts +4 -0
  107. package/lib/app/exceptions/IsAlreadyExistsException.js +28 -0
  108. package/lib/app/exceptions/IsNotFoundException.d.ts +4 -0
  109. package/lib/app/exceptions/IsNotFoundException.js +28 -0
  110. package/lib/app/exceptions/ValueOutOfRangeException.d.ts +4 -0
  111. package/lib/app/exceptions/ValueOutOfRangeException.js +28 -0
  112. package/lib/app/exceptions/base/IllegalArgumentException.d.ts +3 -0
  113. package/lib/app/exceptions/base/IllegalArgumentException.js +27 -0
  114. package/lib/app/exceptions/base/IllegalStateException.d.ts +3 -0
  115. package/lib/app/exceptions/base/IllegalStateException.js +27 -0
  116. package/lib/app/types/EnumBinarySearchTreeType.d.ts +4 -0
  117. package/lib/app/types/EnumBinarySearchTreeType.js +9 -0
  118. package/lib/app/types/EnumGraphTraversalType.d.ts +5 -0
  119. package/lib/app/types/EnumGraphTraversalType.js +10 -0
  120. package/lib/app/types/EnumGraphType.d.ts +4 -0
  121. package/lib/app/types/EnumGraphType.js +9 -0
  122. package/lib/app/types/EnumLinkedListType.d.ts +4 -0
  123. package/lib/app/types/EnumLinkedListType.js +9 -0
  124. package/lib/app/types/EnumRandomGenerationFormat.d.ts +4 -0
  125. package/lib/app/types/EnumRandomGenerationFormat.js +9 -0
  126. package/lib/app/types/EnumSortType.d.ts +7 -0
  127. package/lib/app/types/EnumSortType.js +12 -0
  128. package/lib/app/types/EnumTreeTraversalType.d.ts +5 -0
  129. package/lib/app/types/EnumTreeTraversalType.js +10 -0
  130. package/lib/app/types/FnCompareTwo.d.ts +1 -0
  131. package/lib/app/types/FnCompareTwo.js +3 -0
  132. package/lib/app/types/FnToMemoize.d.ts +1 -0
  133. package/lib/app/types/FnToMemoize.js +3 -0
  134. package/lib/app/types/IArrayFacade.d.ts +4 -0
  135. package/lib/app/types/IArrayFacade.js +3 -0
  136. package/lib/app/types/IBiDirectIterable.d.ts +5 -0
  137. package/lib/app/types/IBiDirectIterable.js +3 -0
  138. package/lib/app/types/IBiDirectIterator.d.ts +11 -0
  139. package/lib/app/types/IBiDirectIterator.js +3 -0
  140. package/lib/app/types/IBinaryTree.d.ts +12 -0
  141. package/lib/app/types/IBinaryTree.js +3 -0
  142. package/lib/app/types/IConvertableToArray.d.ts +4 -0
  143. package/lib/app/types/IConvertableToArray.js +3 -0
  144. package/lib/app/types/IGraph.d.ts +14 -0
  145. package/lib/app/types/IGraph.js +3 -0
  146. package/lib/app/types/IGraphIterationStrategy.d.ts +5 -0
  147. package/lib/app/types/IGraphIterationStrategy.js +3 -0
  148. package/lib/app/types/IGraphIterator.d.ts +11 -0
  149. package/lib/app/types/IGraphIterator.js +3 -0
  150. package/lib/app/types/IIterable.d.ts +4 -0
  151. package/lib/app/types/IIterable.js +3 -0
  152. package/lib/app/types/IIterator.d.ts +14 -0
  153. package/lib/app/types/IIterator.js +3 -0
  154. package/lib/app/types/IKeyValueStorage.d.ts +8 -0
  155. package/lib/app/types/IKeyValueStorage.js +3 -0
  156. package/lib/app/types/ILinearStorage.d.ts +11 -0
  157. package/lib/app/types/ILinearStorage.js +3 -0
  158. package/lib/app/types/ILinearStorageRA.d.ts +13 -0
  159. package/lib/app/types/ILinearStorageRA.js +3 -0
  160. package/lib/app/types/ILinkedList.d.ts +4 -0
  161. package/lib/app/types/ILinkedList.js +3 -0
  162. package/lib/app/types/TypeArrayMatrix.d.ts +1 -0
  163. package/lib/app/types/TypeArrayMatrix.js +3 -0
  164. package/lib/app/utils.d.ts +37 -0
  165. package/lib/app/utils.js +114 -0
  166. package/lib/exports/algorithms.d.ts +16 -0
  167. package/lib/exports/algorithms.js +36 -0
  168. package/lib/exports/constants.d.ts +2 -0
  169. package/lib/exports/constants.js +7 -0
  170. package/lib/exports/data-structures.d.ts +11 -0
  171. package/lib/exports/data-structures.js +24 -0
  172. package/lib/exports/helpers.d.ts +6 -0
  173. package/lib/exports/helpers.js +14 -0
  174. package/lib/exports/sorts.d.ts +6 -0
  175. package/lib/exports/sorts.js +14 -0
  176. package/lib/exports/types.d.ts +16 -0
  177. package/lib/exports/types.js +34 -0
  178. package/lib/exports/utils.d.ts +3 -0
  179. package/lib/exports/utils.js +14 -0
  180. package/lib/exports.d.ts +53 -0
  181. package/lib/exports.js +105 -0
  182. package/lib/index.d.ts +3 -0
  183. package/lib/index.js +5 -0
  184. package/package.json +11 -6
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Merge sorting algorithm
3
+ *
4
+ * @description
5
+ * Time complexity: Best O(n * log(n)); Avg O(n * log(n)); Worst O(n * log(n))
6
+ * @description
7
+ * Memory complexity: Worst case: O(n)
8
+ */
9
+ export declare const mergeSort: (arr: Array<number>) => Array<number>;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mergeSort = void 0;
4
+ /**
5
+ * Merge two sorted arrays into one array
6
+ */
7
+ var merge = function (arr, leftIndex, midIndex, rightIndex) {
8
+ var container = arr.slice(leftIndex, rightIndex + 1);
9
+ var resultArrIndex = leftIndex;
10
+ var leftHalfIndex = leftIndex;
11
+ var rightHalfIndex = midIndex + 1;
12
+ /** While both halves of array are not ended */
13
+ while (leftHalfIndex <= midIndex && rightHalfIndex <= rightIndex) {
14
+ var leftHalfElement = container[leftHalfIndex - leftIndex];
15
+ var rightHalfElement = container[rightHalfIndex - leftIndex];
16
+ if (leftHalfElement < rightHalfElement) {
17
+ arr[resultArrIndex] = leftHalfElement;
18
+ leftHalfIndex++;
19
+ }
20
+ else {
21
+ arr[resultArrIndex] = rightHalfElement;
22
+ rightHalfIndex++;
23
+ }
24
+ resultArrIndex++;
25
+ }
26
+ /** If one of halves is ended, the remaining one will just be pushed to result */
27
+ while (leftHalfIndex <= midIndex) {
28
+ arr[resultArrIndex] = container[leftHalfIndex - leftIndex];
29
+ resultArrIndex++;
30
+ leftHalfIndex++;
31
+ }
32
+ while (rightHalfIndex <= rightIndex) {
33
+ arr[resultArrIndex] = container[rightHalfIndex - leftIndex];
34
+ resultArrIndex++;
35
+ rightHalfIndex++;
36
+ }
37
+ };
38
+ /**
39
+ * Divide array into 2 halves and merge them
40
+ */
41
+ var sortRange = function (arr, leftIndex, rightIndex) {
42
+ if (rightIndex > leftIndex) {
43
+ var midIndex = Math.floor(leftIndex + (rightIndex - leftIndex) / 2);
44
+ sortRange(arr, leftIndex, midIndex);
45
+ sortRange(arr, midIndex + 1, rightIndex);
46
+ merge(arr, leftIndex, midIndex, rightIndex);
47
+ }
48
+ };
49
+ /**
50
+ * Merge sorting algorithm
51
+ *
52
+ * @description
53
+ * Time complexity: Best O(n * log(n)); Avg O(n * log(n)); Worst O(n * log(n))
54
+ * @description
55
+ * Memory complexity: Worst case: O(n)
56
+ */
57
+ exports.mergeSort = function (arr) {
58
+ sortRange(arr, 0, arr.length - 1);
59
+ return arr;
60
+ };
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyZ2Utc29ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvYWxnb3JpdGhtcy9zb3J0cy9tZXJnZS1zb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOztHQUVHO0FBQ0gsSUFBTSxLQUFLLEdBQUcsVUFDWixHQUFrQixFQUNsQixTQUFpQixFQUNqQixRQUFnQixFQUNoQixVQUFrQjtJQUVsQixJQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFdkQsSUFBSSxjQUFjLEdBQUcsU0FBUyxDQUFDO0lBQy9CLElBQUksYUFBYSxHQUFHLFNBQVMsQ0FBQztJQUM5QixJQUFJLGNBQWMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBRWxDLCtDQUErQztJQUMvQyxPQUFPLGFBQWEsSUFBSSxRQUFRLElBQUksY0FBYyxJQUFJLFVBQVUsRUFBRTtRQUNoRSxJQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQyxDQUFDO1FBQzdELElBQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUMsQ0FBQztRQUUvRCxJQUFJLGVBQWUsR0FBRyxnQkFBZ0IsRUFBRTtZQUN0QyxHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsZUFBZSxDQUFDO1lBQ3RDLGFBQWEsRUFBRSxDQUFDO1NBQ2pCO2FBQU07WUFDTCxHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7WUFDdkMsY0FBYyxFQUFFLENBQUM7U0FDbEI7UUFDRCxjQUFjLEVBQUUsQ0FBQztLQUNsQjtJQUVELGlGQUFpRjtJQUNqRixPQUFPLGFBQWEsSUFBSSxRQUFRLEVBQUU7UUFDaEMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFDM0QsY0FBYyxFQUFFLENBQUM7UUFDakIsYUFBYSxFQUFFLENBQUM7S0FDakI7SUFDRCxPQUFPLGNBQWMsSUFBSSxVQUFVLEVBQUU7UUFDbkMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFDNUQsY0FBYyxFQUFFLENBQUM7UUFDakIsY0FBYyxFQUFFLENBQUM7S0FDbEI7QUFDSCxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILElBQU0sU0FBUyxHQUFHLFVBQ2hCLEdBQWtCLEVBQ2xCLFNBQWlCLEVBQ2pCLFVBQWtCO0lBRWxCLElBQUksVUFBVSxHQUFHLFNBQVMsRUFBRTtRQUMxQixJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV0RSxTQUFTLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNwQyxTQUFTLENBQUMsR0FBRyxFQUFFLFFBQVEsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFekMsS0FBSyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQzdDO0FBQ0gsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7R0FPRztBQUNVLFFBQUEsU0FBUyxHQUFHLFVBQUMsR0FBa0I7SUFDMUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUVsQyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsQ0FBQyJ9
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Quick sort algorithm
3
+ *
4
+ * @description
5
+ * Time complexity: Best O(n * log(n)); Avg O(n * log(n)); Worst O(n ^2)
6
+ * @description
7
+ * Memory complexity: Worst case: O(1)
8
+ */
9
+ export declare const quickSort: (arr: Array<number>) => Array<number>;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.quickSort = void 0;
4
+ var utils_1 = require("../../utils");
5
+ /**
6
+ * Quick sort algorithm
7
+ *
8
+ * @description
9
+ * Time complexity: Best O(n * log(n)); Avg O(n * log(n)); Worst O(n ^2)
10
+ * @description
11
+ * Memory complexity: Worst case: O(1)
12
+ */
13
+ exports.quickSort = function (arr) {
14
+ var partition = function (arr, leftIndex, rightIndex) {
15
+ var pivot = arr[leftIndex];
16
+ var leftWall = leftIndex;
17
+ var rightWall = rightIndex;
18
+ while (leftWall <= rightWall) {
19
+ while (arr[rightWall] > pivot) {
20
+ rightWall--;
21
+ }
22
+ while (arr[leftWall] < pivot) {
23
+ leftWall++;
24
+ }
25
+ if (leftWall <= rightWall) {
26
+ utils_1.swapArrayItems(arr, leftWall, rightWall);
27
+ rightWall--;
28
+ leftWall++;
29
+ }
30
+ }
31
+ return leftWall;
32
+ };
33
+ var sort = function (arr, leftIndex, rightIndex) {
34
+ if (leftIndex === void 0) { leftIndex = 0; }
35
+ if (rightIndex === void 0) { rightIndex = arr.length - 1; }
36
+ if (leftIndex < rightIndex) {
37
+ var pivot = partition(arr, leftIndex, rightIndex);
38
+ sort(arr, leftIndex, pivot - 1);
39
+ sort(arr, pivot, rightIndex);
40
+ }
41
+ return arr;
42
+ };
43
+ return sort(arr);
44
+ };
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2stc29ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvYWxnb3JpdGhtcy9zb3J0cy9xdWljay1zb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUE2QztBQUU3Qzs7Ozs7OztHQU9HO0FBQ1UsUUFBQSxTQUFTLEdBQUcsVUFBQyxHQUFrQjtJQUMxQyxJQUFNLFNBQVMsR0FBRyxVQUNoQixHQUFrQixFQUNsQixTQUFpQixFQUNqQixVQUFrQjtRQUVsQixJQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFN0IsSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQ3pCLElBQUksU0FBUyxHQUFHLFVBQVUsQ0FBQztRQUUzQixPQUFPLFFBQVEsSUFBSSxTQUFTLEVBQUU7WUFDNUIsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyxFQUFFO2dCQUM3QixTQUFTLEVBQUUsQ0FBQzthQUNiO1lBQ0QsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxFQUFFO2dCQUM1QixRQUFRLEVBQUUsQ0FBQzthQUNaO1lBQ0QsSUFBSSxRQUFRLElBQUksU0FBUyxFQUFFO2dCQUN6QixzQkFBYyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3pDLFNBQVMsRUFBRSxDQUFDO2dCQUNaLFFBQVEsRUFBRSxDQUFDO2FBQ1o7U0FDRjtRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUMsQ0FBQztJQUVGLElBQU0sSUFBSSxHQUFHLFVBQ1gsR0FBa0IsRUFDbEIsU0FBYSxFQUNiLFVBQW1DO1FBRG5DLDBCQUFBLEVBQUEsYUFBYTtRQUNiLDJCQUFBLEVBQUEsYUFBcUIsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBRW5DLElBQUksU0FBUyxHQUFHLFVBQVUsRUFBRTtZQUMxQixJQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUVwRCxJQUFJLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDOUI7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsQ0FBQztJQUVGLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLENBQUMsQ0FBQyJ9
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Selection sorting algorithm
3
+ *
4
+ * @description
5
+ * Time complexity: Best O(n \^ 2); Avg O(n \^ 2); Worst O(n \^ 2)
6
+ * @description
7
+ * Memory complexity: Worst case: O(1)
8
+ */
9
+ export declare const selectSort: (arr: Array<number>) => Array<number>;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.selectSort = void 0;
4
+ var utils_1 = require("../../utils");
5
+ /**
6
+ * Selection sorting algorithm
7
+ *
8
+ * @description
9
+ * Time complexity: Best O(n \^ 2); Avg O(n \^ 2); Worst O(n \^ 2)
10
+ * @description
11
+ * Memory complexity: Worst case: O(1)
12
+ */
13
+ exports.selectSort = function (arr) {
14
+ for (var index = 0; index < arr.length; index++) {
15
+ var minIndex = utils_1.getMinIndexFromIndex(arr, index);
16
+ utils_1.swapArrayItems(arr, minIndex, index);
17
+ }
18
+ return arr;
19
+ };
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXNvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2FsZ29yaXRobXMvc29ydHMvc2VsZWN0LXNvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUNBQW1FO0FBRW5FOzs7Ozs7O0dBT0c7QUFDVSxRQUFBLFVBQVUsR0FBRyxVQUFDLEdBQWtCO0lBQzNDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQy9DLElBQU0sUUFBUSxHQUFXLDRCQUFvQixDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUUxRCxzQkFBYyxDQUFTLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDOUM7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsQ0FBQyJ9
@@ -0,0 +1,5 @@
1
+ import { TypeArrayMatrix } from "../types/TypeArrayMatrix";
2
+ /**
3
+ * Will flips a matrix over its diagonal
4
+ */
5
+ export declare const transposeMatrix: (matrix: TypeArrayMatrix) => TypeArrayMatrix;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transposeMatrix = void 0;
4
+ var IllegalArgumentException_1 = require("../exceptions/base/IllegalArgumentException");
5
+ var utils_1 = require("../utils");
6
+ /**
7
+ * Will flips a matrix over its diagonal
8
+ */
9
+ exports.transposeMatrix = function (matrix) {
10
+ if (!utils_1.checkIsArrayMatrix(matrix)) {
11
+ throw new IllegalArgumentException_1.default("Given array is not a matrix");
12
+ }
13
+ return matrix.reduce(function (acc, current, currentIndex) {
14
+ acc[currentIndex] = matrix.map(function (rowArr) { return rowArr[currentIndex]; });
15
+ return acc;
16
+ }, new Array(matrix.length));
17
+ };
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3NlLW1hdHJpeC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvYWxnb3JpdGhtcy90cmFuc3Bvc2UtbWF0cml4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHdGQUFtRjtBQUNuRixrQ0FBOEM7QUFFOUM7O0dBRUc7QUFDVSxRQUFBLGVBQWUsR0FBRyxVQUFDLE1BQXVCO0lBQ3JELElBQUksQ0FBQywwQkFBa0IsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUMvQixNQUFNLElBQUksa0NBQXdCLENBQUMsNkJBQTZCLENBQUMsQ0FBQztLQUNuRTtJQUVELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsWUFBWTtRQUM5QyxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFDLE1BQU0sSUFBSyxPQUFBLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBcEIsQ0FBb0IsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQyJ9
@@ -0,0 +1,2 @@
1
+ export declare const EDGE_EXISTS_STATE = 1;
2
+ export declare const EDGE_NOT_EXISTS_STATE = 0;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EDGE_NOT_EXISTS_STATE = exports.EDGE_EXISTS_STATE = void 0;
4
+ exports.EDGE_EXISTS_STATE = 1;
5
+ exports.EDGE_NOT_EXISTS_STATE = 0;
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFDdEIsUUFBQSxxQkFBcUIsR0FBRyxDQUFDLENBQUMifQ==
@@ -0,0 +1,15 @@
1
+ export default abstract class AbstractBinaryNode<T> {
2
+ protected _data: T;
3
+ protected _left: AbstractBinaryNode<T> | null;
4
+ protected _right: AbstractBinaryNode<T> | null;
5
+ protected _parent: AbstractBinaryNode<T> | null;
6
+ protected constructor(initialData: T);
7
+ get data(): T;
8
+ set data(value: T);
9
+ get left(): AbstractBinaryNode<T> | null;
10
+ set left(value: AbstractBinaryNode<T> | null);
11
+ get right(): AbstractBinaryNode<T> | null;
12
+ set right(value: AbstractBinaryNode<T> | null);
13
+ get parent(): AbstractBinaryNode<T> | null;
14
+ set parent(value: AbstractBinaryNode<T> | null);
15
+ }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var AbstractBinaryNode = /** @class */ (function () {
4
+ function AbstractBinaryNode(initialData) {
5
+ this._data = initialData;
6
+ this._left = null;
7
+ this._right = null;
8
+ this._parent = null;
9
+ }
10
+ Object.defineProperty(AbstractBinaryNode.prototype, "data", {
11
+ get: function () {
12
+ return this._data;
13
+ },
14
+ set: function (value) {
15
+ this._data = value;
16
+ },
17
+ enumerable: false,
18
+ configurable: true
19
+ });
20
+ Object.defineProperty(AbstractBinaryNode.prototype, "left", {
21
+ get: function () {
22
+ return this._left;
23
+ },
24
+ set: function (value) {
25
+ this._left = value;
26
+ },
27
+ enumerable: false,
28
+ configurable: true
29
+ });
30
+ Object.defineProperty(AbstractBinaryNode.prototype, "right", {
31
+ get: function () {
32
+ return this._right;
33
+ },
34
+ set: function (value) {
35
+ this._right = value;
36
+ },
37
+ enumerable: false,
38
+ configurable: true
39
+ });
40
+ Object.defineProperty(AbstractBinaryNode.prototype, "parent", {
41
+ get: function () {
42
+ return this._parent;
43
+ },
44
+ set: function (value) {
45
+ this._parent = value;
46
+ },
47
+ enumerable: false,
48
+ configurable: true
49
+ });
50
+ return AbstractBinaryNode;
51
+ }());
52
+ exports.default = AbstractBinaryNode;
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RCaW5hcnlOb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9kYXRhLXN0cnVjdHVyZXMvQmluYXJ5VHJlZS9BYnN0cmFjdEJpbmFyeVRyZWUvQWJzdHJhY3RCaW5hcnlOb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7SUFNRSw0QkFBc0IsV0FBYztRQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUN0QixDQUFDO0lBRUQsc0JBQVcsb0NBQUk7YUFBZjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNwQixDQUFDO2FBRUQsVUFBZ0IsS0FBUTtZQUN0QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNyQixDQUFDOzs7T0FKQTtJQU1ELHNCQUFXLG9DQUFJO2FBQWY7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDcEIsQ0FBQzthQUVELFVBQWdCLEtBQW1DO1lBQ2pELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLENBQUM7OztPQUpBO0lBTUQsc0JBQVcscUNBQUs7YUFBaEI7WUFDRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDckIsQ0FBQzthQUVELFVBQWlCLEtBQW1DO1lBQ2xELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLENBQUM7OztPQUpBO0lBTUQsc0JBQVcsc0NBQU07YUFBakI7WUFDRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDdEIsQ0FBQzthQUVELFVBQWtCLEtBQW1DO1lBQ25ELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLENBQUM7OztPQUpBO0lBS0gseUJBQUM7QUFBRCxDQUFDLEFBNUNELElBNENDIn0=
@@ -0,0 +1,60 @@
1
+ import IBinaryTree from "../../../types/IBinaryTree";
2
+ import { FnCompareTwo } from "../../../types/FnCompareTwo";
3
+ import AbstractBinaryNode from "./AbstractBinaryNode";
4
+ import { EnumTreeTraversalType } from "../../../types/EnumTreeTraversalType";
5
+ /**
6
+ *
7
+ */
8
+ export default abstract class AbstractBinaryTree<T> implements IBinaryTree<T> {
9
+ /**
10
+ * Function that checks is node A better
11
+ * @default a > b
12
+ * @example 5 > 4
13
+ * @example 'abc' > 'aba'
14
+ */
15
+ protected compare: FnCompareTwo<T>;
16
+ protected _head: AbstractBinaryNode<T> | null;
17
+ protected _length: number;
18
+ /**
19
+ *
20
+ * @param fnCompare
21
+ * @protected
22
+ */
23
+ protected constructor(fnCompare?: FnCompareTwo<T>);
24
+ /**
25
+ * Returns nodes count in the entire tree
26
+ */
27
+ length(): number;
28
+ /**
29
+ * Will create new node and place it according to the type of tree rules
30
+ */
31
+ abstract insert(value: T): void;
32
+ /**
33
+ * Will check if tree has a node with given data
34
+ */
35
+ abstract has(value: T): boolean;
36
+ /**
37
+ * Will delete node from the tree and restructure it
38
+ */
39
+ abstract delete(value: T): void;
40
+ /**
41
+ * Max value of the tree
42
+ */
43
+ abstract max(): T;
44
+ /**
45
+ * Min value of the tree
46
+ */
47
+ abstract min(): T;
48
+ /**
49
+ * Returns same class instance with new head node
50
+ */
51
+ abstract subtree(value: T): IBinaryTree<T>;
52
+ /**
53
+ * Returns the highest branch length in the tree
54
+ */
55
+ abstract height(): number;
56
+ /**
57
+ * In-order/Pre-order/Post-order traversing of the tree
58
+ */
59
+ abstract traverse(type: EnumTreeTraversalType): Array<T>;
60
+ }
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ *
5
+ */
6
+ var AbstractBinaryTree = /** @class */ (function () {
7
+ /**
8
+ *
9
+ * @param fnCompare
10
+ * @protected
11
+ */
12
+ function AbstractBinaryTree(fnCompare) {
13
+ /**
14
+ * Function that checks is node A better
15
+ * @default a > b
16
+ * @example 5 > 4
17
+ * @example 'abc' > 'aba'
18
+ */
19
+ this.compare = function (a, b) { return a > b; };
20
+ if (fnCompare) {
21
+ this.compare = fnCompare;
22
+ console.log(this.compare);
23
+ }
24
+ this._head = null;
25
+ this._length = 0;
26
+ }
27
+ /**
28
+ * Returns nodes count in the entire tree
29
+ */
30
+ AbstractBinaryTree.prototype.length = function () {
31
+ return this._length;
32
+ };
33
+ return AbstractBinaryTree;
34
+ }());
35
+ exports.default = AbstractBinaryTree;
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RCaW5hcnlUcmVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9kYXRhLXN0cnVjdHVyZXMvQmluYXJ5VHJlZS9BYnN0cmFjdEJpbmFyeVRyZWUvQWJzdHJhY3RCaW5hcnlUcmVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBS0E7O0dBRUc7QUFDSDtJQVdFOzs7O09BSUc7SUFDSCw0QkFBc0IsU0FBMkI7UUFmakQ7Ozs7O1dBS0c7UUFDTyxZQUFPLEdBQW9CLFVBQUMsQ0FBSSxFQUFFLENBQUksSUFBSyxPQUFBLENBQUMsR0FBRyxDQUFDLEVBQUwsQ0FBSyxDQUFDO1FBVXpELElBQUksU0FBUyxFQUFFO1lBQ2IsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7WUFDekIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDM0I7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxtQ0FBTSxHQUFiO1FBQ0UsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUF5Q0gseUJBQUM7QUFBRCxDQUFDLEFBdkVELElBdUVDIn0=
@@ -0,0 +1,13 @@
1
+ import AbstractBinaryNode from "../AbstractBinaryTree/AbstractBinaryNode";
2
+ export default class BinarySearchNode<T> extends AbstractBinaryNode<T> {
3
+ protected _left: BinarySearchNode<T> | null;
4
+ protected _right: BinarySearchNode<T> | null;
5
+ protected _parent: BinarySearchNode<T> | null;
6
+ constructor(initialData: T);
7
+ get left(): BinarySearchNode<T> | null;
8
+ set left(value: BinarySearchNode<T> | null);
9
+ get right(): BinarySearchNode<T> | null;
10
+ set right(value: BinarySearchNode<T> | null);
11
+ get parent(): BinarySearchNode<T> | null;
12
+ set parent(value: BinarySearchNode<T> | null);
13
+ }
@@ -0,0 +1,59 @@
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 AbstractBinaryNode_1 = require("../AbstractBinaryTree/AbstractBinaryNode");
17
+ var BinarySearchNode = /** @class */ (function (_super) {
18
+ __extends(BinarySearchNode, _super);
19
+ function BinarySearchNode(initialData) {
20
+ var _this = _super.call(this, initialData) || this;
21
+ _this._left = null;
22
+ _this._right = null;
23
+ _this._parent = null;
24
+ return _this;
25
+ }
26
+ Object.defineProperty(BinarySearchNode.prototype, "left", {
27
+ get: function () {
28
+ return this._left;
29
+ },
30
+ set: function (value) {
31
+ this._left = value;
32
+ },
33
+ enumerable: false,
34
+ configurable: true
35
+ });
36
+ Object.defineProperty(BinarySearchNode.prototype, "right", {
37
+ get: function () {
38
+ return this._right;
39
+ },
40
+ set: function (value) {
41
+ this._right = value;
42
+ },
43
+ enumerable: false,
44
+ configurable: true
45
+ });
46
+ Object.defineProperty(BinarySearchNode.prototype, "parent", {
47
+ get: function () {
48
+ return this._parent;
49
+ },
50
+ set: function (value) {
51
+ this._parent = value;
52
+ },
53
+ enumerable: false,
54
+ configurable: true
55
+ });
56
+ return BinarySearchNode;
57
+ }(AbstractBinaryNode_1.default));
58
+ exports.default = BinarySearchNode;
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmluYXJ5U2VhcmNoTm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGF0YS1zdHJ1Y3R1cmVzL0JpbmFyeVRyZWUvQmluYXJ5U2VhcmNoVHJlZS9CaW5hcnlTZWFyY2hOb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtFQUEwRTtBQUUxRTtJQUFpRCxvQ0FBcUI7SUFLcEUsMEJBQW1CLFdBQWM7UUFBakMsWUFDRSxrQkFBTSxXQUFXLENBQUMsU0FJbkI7UUFIQyxLQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixLQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixLQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzs7SUFDdEIsQ0FBQztJQUVELHNCQUFXLGtDQUFJO2FBQWY7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDcEIsQ0FBQzthQUVELFVBQWdCLEtBQWlDO1lBQy9DLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLENBQUM7OztPQUpBO0lBTUQsc0JBQVcsbUNBQUs7YUFBaEI7WUFDRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDckIsQ0FBQzthQUVELFVBQWlCLEtBQWlDO1lBQ2hELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLENBQUM7OztPQUpBO0lBTUQsc0JBQVcsb0NBQU07YUFBakI7WUFDRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDdEIsQ0FBQzthQUVELFVBQWtCLEtBQWlDO1lBQ2pELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLENBQUM7OztPQUpBO0lBS0gsdUJBQUM7QUFBRCxDQUFDLEFBbkNELENBQWlELDRCQUFrQixHQW1DbEUifQ==
@@ -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
+ }