@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.
- package/README.md +71 -88
- package/lib/app/algorithms/binary-search.d.ts +5 -0
- package/lib/app/algorithms/binary-search.js +27 -0
- package/lib/app/algorithms/factorial.d.ts +9 -0
- package/lib/app/algorithms/factorial.js +17 -0
- package/lib/app/algorithms/fibonacci.d.ts +9 -0
- package/lib/app/algorithms/fibonacci.js +17 -0
- package/lib/app/algorithms/graph/iterator/AbstractGraphIterator.d.ts +35 -0
- package/lib/app/algorithms/graph/iterator/AbstractGraphIterator.js +83 -0
- package/lib/app/algorithms/graph/iterator/GraphIteratorBFS.d.ts +28 -0
- package/lib/app/algorithms/graph/iterator/GraphIteratorBFS.js +70 -0
- package/lib/app/algorithms/graph/iterator/GraphIteratorDFS.d.ts +28 -0
- package/lib/app/algorithms/graph/iterator/GraphIteratorDFS.js +70 -0
- package/lib/app/algorithms/graph/iterator/GraphIteratorDijkstra.d.ts +32 -0
- package/lib/app/algorithms/graph/iterator/GraphIteratorDijkstra.js +97 -0
- package/lib/app/algorithms/graph/iterator-strategy/BFSIterationStrategy.d.ts +6 -0
- package/lib/app/algorithms/graph/iterator-strategy/BFSIterationStrategy.js +13 -0
- package/lib/app/algorithms/graph/iterator-strategy/DFSIterationStrategy.d.ts +6 -0
- package/lib/app/algorithms/graph/iterator-strategy/DFSIterationStrategy.js +13 -0
- package/lib/app/algorithms/graph/iterator-strategy/DijkstraIterationStrategy.d.ts +6 -0
- package/lib/app/algorithms/graph/iterator-strategy/DijkstraIterationStrategy.js +13 -0
- package/lib/app/algorithms/graph/presenter/presenterAdjacencyLists.d.ts +19 -0
- package/lib/app/algorithms/graph/presenter/presenterAdjacencyLists.js +28 -0
- package/lib/app/algorithms/graph/presenter/presenterAdjacencyMatrix.d.ts +32 -0
- package/lib/app/algorithms/graph/presenter/presenterAdjacencyMatrix.js +48 -0
- package/lib/app/algorithms/graph/searching/hasPath.d.ts +9 -0
- package/lib/app/algorithms/graph/searching/hasPath.js +30 -0
- package/lib/app/algorithms/graph/searching/shortestPath.d.ts +9 -0
- package/lib/app/algorithms/graph/searching/shortestPath.js +30 -0
- package/lib/app/algorithms/graph/transposing/transposeDirectedGraph.d.ts +2 -0
- package/lib/app/algorithms/graph/transposing/transposeDirectedGraph.js +14 -0
- package/lib/app/algorithms/memoize.d.ts +5 -0
- package/lib/app/algorithms/memoize.js +22 -0
- package/lib/app/algorithms/sorts/bubble-sort.d.ts +9 -0
- package/lib/app/algorithms/sorts/bubble-sort.js +23 -0
- package/lib/app/algorithms/sorts/insertion-sort.d.ts +9 -0
- package/lib/app/algorithms/sorts/insertion-sort.js +25 -0
- package/lib/app/algorithms/sorts/merge-sort.d.ts +9 -0
- package/lib/app/algorithms/sorts/merge-sort.js +61 -0
- package/lib/app/algorithms/sorts/quick-sort.d.ts +9 -0
- package/lib/app/algorithms/sorts/quick-sort.js +45 -0
- package/lib/app/algorithms/sorts/select-sort.d.ts +9 -0
- package/lib/app/algorithms/sorts/select-sort.js +20 -0
- package/lib/app/algorithms/transpose-matrix.d.ts +5 -0
- package/lib/app/algorithms/transpose-matrix.js +18 -0
- package/lib/app/constants.d.ts +2 -0
- package/lib/app/constants.js +6 -0
- package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.d.ts +15 -0
- package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.js +53 -0
- package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.d.ts +60 -0
- package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.js +36 -0
- package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.d.ts +13 -0
- package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.js +59 -0
- package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.d.ts +70 -0
- package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.js +271 -0
- package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.d.ts +16 -0
- package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.js +70 -0
- package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.d.ts +57 -0
- package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.js +235 -0
- package/lib/app/data-structures/BinaryTree/_helpers/createBinaryTree.d.ts +6 -0
- package/lib/app/data-structures/BinaryTree/_helpers/createBinaryTree.js +22 -0
- package/lib/app/data-structures/Graph/AbstractGraph.d.ts +84 -0
- package/lib/app/data-structures/Graph/AbstractGraph.js +143 -0
- package/lib/app/data-structures/Graph/DirectedGraph.d.ts +24 -0
- package/lib/app/data-structures/Graph/DirectedGraph.js +86 -0
- package/lib/app/data-structures/Graph/GraphEdge.d.ts +16 -0
- package/lib/app/data-structures/Graph/GraphEdge.js +43 -0
- package/lib/app/data-structures/Graph/UndirectedGraph.d.ts +28 -0
- package/lib/app/data-structures/Graph/UndirectedGraph.js +103 -0
- package/lib/app/data-structures/Graph/_helpers/createGraph.d.ts +6 -0
- package/lib/app/data-structures/Graph/_helpers/createGraph.js +22 -0
- package/lib/app/data-structures/Graph/_helpers/createGraphFromMatrix.d.ts +7 -0
- package/lib/app/data-structures/Graph/_helpers/createGraphFromMatrix.js +42 -0
- package/lib/app/data-structures/Graph/_helpers/generateRandomGraph.d.ts +4 -0
- package/lib/app/data-structures/Graph/_helpers/generateRandomGraph.js +67 -0
- package/lib/app/data-structures/HashTable/HashTable.d.ts +73 -0
- package/lib/app/data-structures/HashTable/HashTable.js +171 -0
- package/lib/app/data-structures/HashTable/HashTableNode.d.ts +11 -0
- package/lib/app/data-structures/HashTable/HashTableNode.js +39 -0
- package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.d.ts +125 -0
- package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.js +241 -0
- package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.d.ts +20 -0
- package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.js +41 -0
- package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.d.ts +48 -0
- package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.js +151 -0
- package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.d.ts +25 -0
- package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.js +65 -0
- package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.d.ts +52 -0
- package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.js +138 -0
- package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.d.ts +7 -0
- package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.js +29 -0
- package/lib/app/data-structures/LinkedList/_helpers/createLinkedList.d.ts +3 -0
- package/lib/app/data-structures/LinkedList/_helpers/createLinkedList.js +19 -0
- package/lib/app/data-structures/LoopedArray/LoopedArray.d.ts +83 -0
- package/lib/app/data-structures/LoopedArray/LoopedArray.js +169 -0
- package/lib/app/data-structures/Queue/Queue.d.ts +50 -0
- package/lib/app/data-structures/Queue/Queue.js +85 -0
- package/lib/app/data-structures/Stack/Stack.d.ts +50 -0
- package/lib/app/data-structures/Stack/Stack.js +85 -0
- package/lib/app/exceptions/CollectionIsEmptyException.d.ts +4 -0
- package/lib/app/exceptions/CollectionIsEmptyException.js +28 -0
- package/lib/app/exceptions/CollectionIsFullException.d.ts +4 -0
- package/lib/app/exceptions/CollectionIsFullException.js +28 -0
- package/lib/app/exceptions/IndexOutOfBoundsException.d.ts +4 -0
- package/lib/app/exceptions/IndexOutOfBoundsException.js +28 -0
- package/lib/app/exceptions/IsAlreadyExistsException.d.ts +4 -0
- package/lib/app/exceptions/IsAlreadyExistsException.js +28 -0
- package/lib/app/exceptions/IsNotFoundException.d.ts +4 -0
- package/lib/app/exceptions/IsNotFoundException.js +28 -0
- package/lib/app/exceptions/ValueOutOfRangeException.d.ts +4 -0
- package/lib/app/exceptions/ValueOutOfRangeException.js +28 -0
- package/lib/app/exceptions/base/IllegalArgumentException.d.ts +3 -0
- package/lib/app/exceptions/base/IllegalArgumentException.js +27 -0
- package/lib/app/exceptions/base/IllegalStateException.d.ts +3 -0
- package/lib/app/exceptions/base/IllegalStateException.js +27 -0
- package/lib/app/types/EnumBinarySearchTreeType.d.ts +4 -0
- package/lib/app/types/EnumBinarySearchTreeType.js +9 -0
- package/lib/app/types/EnumGraphTraversalType.d.ts +5 -0
- package/lib/app/types/EnumGraphTraversalType.js +10 -0
- package/lib/app/types/EnumGraphType.d.ts +4 -0
- package/lib/app/types/EnumGraphType.js +9 -0
- package/lib/app/types/EnumLinkedListType.d.ts +4 -0
- package/lib/app/types/EnumLinkedListType.js +9 -0
- package/lib/app/types/EnumRandomGenerationFormat.d.ts +4 -0
- package/lib/app/types/EnumRandomGenerationFormat.js +9 -0
- package/lib/app/types/EnumSortType.d.ts +7 -0
- package/lib/app/types/EnumSortType.js +12 -0
- package/lib/app/types/EnumTreeTraversalType.d.ts +5 -0
- package/lib/app/types/EnumTreeTraversalType.js +10 -0
- package/lib/app/types/FnCompareTwo.d.ts +1 -0
- package/lib/app/types/FnCompareTwo.js +3 -0
- package/lib/app/types/FnToMemoize.d.ts +1 -0
- package/lib/app/types/FnToMemoize.js +3 -0
- package/lib/app/types/IArrayFacade.d.ts +4 -0
- package/lib/app/types/IArrayFacade.js +3 -0
- package/lib/app/types/IBiDirectIterable.d.ts +5 -0
- package/lib/app/types/IBiDirectIterable.js +3 -0
- package/lib/app/types/IBiDirectIterator.d.ts +11 -0
- package/lib/app/types/IBiDirectIterator.js +3 -0
- package/lib/app/types/IBinaryTree.d.ts +12 -0
- package/lib/app/types/IBinaryTree.js +3 -0
- package/lib/app/types/IConvertableToArray.d.ts +4 -0
- package/lib/app/types/IConvertableToArray.js +3 -0
- package/lib/app/types/IGraph.d.ts +14 -0
- package/lib/app/types/IGraph.js +3 -0
- package/lib/app/types/IGraphIterationStrategy.d.ts +5 -0
- package/lib/app/types/IGraphIterationStrategy.js +3 -0
- package/lib/app/types/IGraphIterator.d.ts +11 -0
- package/lib/app/types/IGraphIterator.js +3 -0
- package/lib/app/types/IIterable.d.ts +4 -0
- package/lib/app/types/IIterable.js +3 -0
- package/lib/app/types/IIterator.d.ts +14 -0
- package/lib/app/types/IIterator.js +3 -0
- package/lib/app/types/IKeyValueStorage.d.ts +8 -0
- package/lib/app/types/IKeyValueStorage.js +3 -0
- package/lib/app/types/ILinearStorage.d.ts +11 -0
- package/lib/app/types/ILinearStorage.js +3 -0
- package/lib/app/types/ILinearStorageRA.d.ts +13 -0
- package/lib/app/types/ILinearStorageRA.js +3 -0
- package/lib/app/types/ILinkedList.d.ts +4 -0
- package/lib/app/types/ILinkedList.js +3 -0
- package/lib/app/types/TypeArrayMatrix.d.ts +1 -0
- package/lib/app/types/TypeArrayMatrix.js +3 -0
- package/lib/app/utils.d.ts +37 -0
- package/lib/app/utils.js +114 -0
- package/lib/exports/algorithms.d.ts +16 -0
- package/lib/exports/algorithms.js +36 -0
- package/lib/exports/constants.d.ts +2 -0
- package/lib/exports/constants.js +7 -0
- package/lib/exports/data-structures.d.ts +11 -0
- package/lib/exports/data-structures.js +24 -0
- package/lib/exports/helpers.d.ts +6 -0
- package/lib/exports/helpers.js +14 -0
- package/lib/exports/sorts.d.ts +6 -0
- package/lib/exports/sorts.js +14 -0
- package/lib/exports/types.d.ts +16 -0
- package/lib/exports/types.js +34 -0
- package/lib/exports/utils.d.ts +3 -0
- package/lib/exports/utils.js +14 -0
- package/lib/exports.d.ts +53 -0
- package/lib/exports.js +105 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.js +5 -0
- 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,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,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,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,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
|
+
}
|