data-structure-typed 1.31.0 → 1.32.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/.gitattributes +112 -0
- package/.github/workflows/ci.yml +12 -1
- package/.prettierrc.js +1 -1
- package/CHANGELOG.md +1 -1
- package/CODE-OF-CONDUCT.md +80 -0
- package/COMMANDS.md +28 -0
- package/README.md +20 -3
- package/SECURITY.md +15 -0
- package/coverage/clover.xml +3393 -0
- package/coverage/coverage-final.json +67 -0
- package/coverage/coverage-summary.json +68 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +386 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +196 -0
- package/coverage/lcov-report/src/data-structures/binary-tree/aa-tree.ts.html +88 -0
- package/coverage/lcov-report/src/data-structures/binary-tree/abstract-binary-tree.ts.html +4978 -0
- package/coverage/lcov-report/src/data-structures/binary-tree/avl-tree.ts.html +1015 -0
- package/coverage/lcov-report/src/data-structures/binary-tree/b-tree.ts.html +88 -0
- package/coverage/lcov-report/src/data-structures/binary-tree/binary-indexed-tree.ts.html +313 -0
- package/coverage/lcov-report/src/data-structures/binary-tree/binary-tree.ts.html +226 -0
- package/coverage/lcov-report/src/data-structures/binary-tree/bst.ts.html +1696 -0
- package/coverage/lcov-report/src/data-structures/binary-tree/index.html +296 -0
- package/coverage/lcov-report/src/data-structures/binary-tree/index.ts.html +121 -0
- package/coverage/lcov-report/src/data-structures/binary-tree/rb-tree.ts.html +388 -0
- package/coverage/lcov-report/src/data-structures/binary-tree/segment-tree.ts.html +811 -0
- package/coverage/lcov-report/src/data-structures/binary-tree/splay-tree.ts.html +88 -0
- package/coverage/lcov-report/src/data-structures/binary-tree/tree-multiset.ts.html +2185 -0
- package/coverage/lcov-report/src/data-structures/binary-tree/two-three-tree.ts.html +88 -0
- package/coverage/lcov-report/src/data-structures/graph/abstract-graph.ts.html +3205 -0
- package/coverage/lcov-report/src/data-structures/graph/directed-graph.ts.html +1495 -0
- package/coverage/lcov-report/src/data-structures/graph/index.html +176 -0
- package/coverage/lcov-report/src/data-structures/graph/index.ts.html +97 -0
- package/coverage/lcov-report/src/data-structures/graph/map-graph.ts.html +472 -0
- package/coverage/lcov-report/src/data-structures/graph/undirected-graph.ts.html +907 -0
- package/coverage/lcov-report/src/data-structures/hash/coordinate-map.ts.html +286 -0
- package/coverage/lcov-report/src/data-structures/hash/coordinate-set.ts.html +253 -0
- package/coverage/lcov-report/src/data-structures/hash/hash-table.ts.html +88 -0
- package/coverage/lcov-report/src/data-structures/hash/index.html +206 -0
- package/coverage/lcov-report/src/data-structures/hash/index.ts.html +103 -0
- package/coverage/lcov-report/src/data-structures/hash/pair.ts.html +88 -0
- package/coverage/lcov-report/src/data-structures/hash/tree-map.ts.html +88 -0
- package/coverage/lcov-report/src/data-structures/hash/tree-set.ts.html +88 -0
- package/coverage/lcov-report/src/data-structures/heap/heap.ts.html +721 -0
- package/coverage/lcov-report/src/data-structures/heap/index.html +161 -0
- package/coverage/lcov-report/src/data-structures/heap/index.ts.html +94 -0
- package/coverage/lcov-report/src/data-structures/heap/max-heap.ts.html +178 -0
- package/coverage/lcov-report/src/data-structures/heap/min-heap.ts.html +181 -0
- package/coverage/lcov-report/src/data-structures/index.html +116 -0
- package/coverage/lcov-report/src/data-structures/index.ts.html +118 -0
- package/coverage/lcov-report/src/data-structures/linked-list/doubly-linked-list.ts.html +1804 -0
- package/coverage/lcov-report/src/data-structures/linked-list/index.html +161 -0
- package/coverage/lcov-report/src/data-structures/linked-list/index.ts.html +94 -0
- package/coverage/lcov-report/src/data-structures/linked-list/singly-linked-list.ts.html +1588 -0
- package/coverage/lcov-report/src/data-structures/linked-list/skip-linked-list.ts.html +88 -0
- package/coverage/lcov-report/src/data-structures/matrix/index.html +176 -0
- package/coverage/lcov-report/src/data-structures/matrix/index.ts.html +97 -0
- package/coverage/lcov-report/src/data-structures/matrix/matrix.ts.html +166 -0
- package/coverage/lcov-report/src/data-structures/matrix/matrix2d.ts.html +721 -0
- package/coverage/lcov-report/src/data-structures/matrix/navigator.ts.html +448 -0
- package/coverage/lcov-report/src/data-structures/matrix/vector2d.ts.html +1033 -0
- package/coverage/lcov-report/src/data-structures/priority-queue/index.html +161 -0
- package/coverage/lcov-report/src/data-structures/priority-queue/index.ts.html +94 -0
- package/coverage/lcov-report/src/data-structures/priority-queue/max-priority-queue.ts.html +253 -0
- package/coverage/lcov-report/src/data-structures/priority-queue/min-priority-queue.ts.html +256 -0
- package/coverage/lcov-report/src/data-structures/priority-queue/priority-queue.ts.html +1162 -0
- package/coverage/lcov-report/src/data-structures/queue/deque.ts.html +976 -0
- package/coverage/lcov-report/src/data-structures/queue/index.html +146 -0
- package/coverage/lcov-report/src/data-structures/queue/index.ts.html +91 -0
- package/coverage/lcov-report/src/data-structures/queue/queue.ts.html +658 -0
- package/coverage/lcov-report/src/data-structures/stack/index.html +131 -0
- package/coverage/lcov-report/src/data-structures/stack/index.ts.html +88 -0
- package/coverage/lcov-report/src/data-structures/stack/stack.ts.html +379 -0
- package/coverage/lcov-report/src/data-structures/tree/index.html +131 -0
- package/coverage/lcov-report/src/data-structures/tree/index.ts.html +88 -0
- package/coverage/lcov-report/src/data-structures/tree/tree.ts.html +292 -0
- package/coverage/lcov-report/src/data-structures/trie/index.html +131 -0
- package/coverage/lcov-report/src/data-structures/trie/index.ts.html +88 -0
- package/coverage/lcov-report/src/data-structures/trie/trie.ts.html +760 -0
- package/coverage/lcov-report/src/index.html +116 -0
- package/coverage/lcov-report/src/index.ts.html +97 -0
- package/coverage/lcov-report/src/interfaces/index.html +116 -0
- package/coverage/lcov-report/src/interfaces/index.ts.html +130 -0
- package/coverage/lcov-report/src/types/data-structures/abstract-binary-tree.ts.html +235 -0
- package/coverage/lcov-report/src/types/data-structures/bst.ts.html +124 -0
- package/coverage/lcov-report/src/types/data-structures/directed-graph.ts.html +109 -0
- package/coverage/lcov-report/src/types/data-structures/index.html +176 -0
- package/coverage/lcov-report/src/types/data-structures/index.ts.html +130 -0
- package/coverage/lcov-report/src/types/data-structures/rb-tree.ts.html +106 -0
- package/coverage/lcov-report/src/types/index.html +116 -0
- package/coverage/lcov-report/src/types/index.ts.html +94 -0
- package/coverage/lcov-report/src/types/utils/index.html +116 -0
- package/coverage/lcov-report/src/types/utils/index.ts.html +91 -0
- package/coverage/lcov-report/src/utils/index.html +131 -0
- package/coverage/lcov-report/src/utils/index.ts.html +88 -0
- package/coverage/lcov-report/src/utils/utils.ts.html +322 -0
- package/coverage/lcov-report/test/utils/index.html +146 -0
- package/coverage/lcov-report/test/utils/index.ts.html +91 -0
- package/coverage/lcov-report/test/utils/magnitude.ts.html +148 -0
- package/coverage/lcov-report/test/utils/number.ts.html +94 -0
- package/coverage/lcov.info +6676 -0
- package/dist/data-structures/binary-tree/abstract-binary-tree.js.map +1 -1
- package/dist/data-structures/binary-tree/avl-tree.js.map +1 -1
- package/dist/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/data-structures/binary-tree/rb-tree.js.map +1 -1
- package/dist/data-structures/binary-tree/tree-multiset.js.map +1 -1
- package/dist/data-structures/graph/abstract-graph.js.map +1 -1
- package/dist/data-structures/graph/directed-graph.js.map +1 -1
- package/dist/data-structures/graph/map-graph.js.map +1 -1
- package/dist/data-structures/graph/undirected-graph.js.map +1 -1
- package/dist/data-structures/heap/heap.js.map +1 -1
- package/dist/data-structures/heap/max-heap.js.map +1 -1
- package/dist/data-structures/heap/min-heap.js.map +1 -1
- package/dist/data-structures/matrix/matrix.js.map +1 -1
- package/dist/data-structures/matrix/navigator.js.map +1 -1
- package/dist/data-structures/priority-queue/max-priority-queue.js.map +1 -1
- package/dist/data-structures/priority-queue/min-priority-queue.js.map +1 -1
- package/dist/data-structures/priority-queue/priority-queue.js.map +1 -1
- package/dist/data-structures/queue/deque.js.map +1 -1
- package/dist/data-structures/queue/queue.js.map +1 -1
- package/dist/data-structures/tree/tree.js.map +1 -1
- package/dist/utils/utils.js.map +1 -1
- package/docs/classes/AVLTree.html +205 -282
- package/docs/classes/AVLTreeNode.html +15 -15
- package/docs/classes/AaTree.html +1 -1
- package/docs/classes/AbstractBinaryTree.html +198 -275
- package/docs/classes/AbstractBinaryTreeNode.html +21 -21
- package/docs/classes/AbstractEdge.html +11 -11
- package/docs/classes/AbstractGraph.html +36 -36
- package/docs/classes/AbstractVertex.html +8 -8
- package/docs/classes/ArrayDeque.html +14 -14
- package/docs/classes/BST.html +198 -275
- package/docs/classes/BSTNode.html +15 -15
- package/docs/classes/BTree.html +1 -1
- package/docs/classes/BinaryIndexedTree.html +9 -9
- package/docs/classes/BinaryTree.html +191 -268
- package/docs/classes/BinaryTreeNode.html +15 -15
- package/docs/classes/Character.html +4 -4
- package/docs/classes/CoordinateMap.html +9 -9
- package/docs/classes/CoordinateSet.html +8 -8
- package/docs/classes/Deque.html +34 -34
- package/docs/classes/DirectedEdge.html +15 -15
- package/docs/classes/DirectedGraph.html +52 -52
- package/docs/classes/DirectedVertex.html +6 -6
- package/docs/classes/DoublyLinkedList.html +37 -37
- package/docs/classes/DoublyLinkedListNode.html +11 -11
- package/docs/classes/HashTable.html +1 -1
- package/docs/classes/Heap.html +26 -26
- package/docs/classes/HeapItem.html +8 -8
- package/docs/classes/LinkedListQueue.html +35 -35
- package/docs/classes/MapEdge.html +13 -13
- package/docs/classes/MapGraph.html +56 -56
- package/docs/classes/MapVertex.html +12 -12
- package/docs/classes/Matrix2D.html +16 -16
- package/docs/classes/MatrixNTI2D.html +4 -4
- package/docs/classes/MaxHeap.html +26 -26
- package/docs/classes/MaxPriorityQueue.html +34 -34
- package/docs/classes/MinHeap.html +26 -26
- package/docs/classes/MinPriorityQueue.html +34 -34
- package/docs/classes/Navigator.html +10 -10
- package/docs/classes/ObjectDeque.html +25 -25
- package/docs/classes/Pair.html +1 -1
- package/docs/classes/PriorityQueue.html +32 -32
- package/docs/classes/Queue.html +22 -22
- package/docs/classes/RBTree.html +198 -275
- package/docs/classes/RBTreeNode.html +18 -18
- package/docs/classes/SegmentTree.html +17 -17
- package/docs/classes/SegmentTreeNode.html +20 -20
- package/docs/classes/SinglyLinkedList.html +35 -35
- package/docs/classes/SinglyLinkedListNode.html +8 -8
- package/docs/classes/SkipLinkedList.html +1 -1
- package/docs/classes/SplayTree.html +1 -1
- package/docs/classes/Stack.html +12 -12
- package/docs/classes/TreeMap.html +1 -1
- package/docs/classes/TreeMultiset.html +219 -296
- package/docs/classes/TreeMultisetNode.html +18 -18
- package/docs/classes/TreeNode.html +13 -13
- package/docs/classes/TreeSet.html +1 -1
- package/docs/classes/Trie.html +13 -13
- package/docs/classes/TrieNode.html +11 -11
- package/docs/classes/TwoThreeTree.html +1 -1
- package/docs/classes/UndirectedEdge.html +12 -12
- package/docs/classes/UndirectedGraph.html +40 -40
- package/docs/classes/UndirectedVertex.html +6 -6
- package/docs/classes/Vector2D.html +28 -28
- package/docs/enums/CP.html +4 -4
- package/docs/enums/FamilyPosition.html +8 -8
- package/docs/enums/LoopType.html +3 -3
- package/docs/enums/RBColor.html +3 -3
- package/docs/enums/TopologicalProperty.html +4 -4
- package/docs/functions/arrayRemove.html +1 -1
- package/docs/functions/isThunk.html +1 -1
- package/docs/functions/toThunk.html +1 -1
- package/docs/functions/trampoline.html +1 -1
- package/docs/functions/trampolineAsync.html +1 -1
- package/docs/functions/uuidV4.html +1 -1
- package/docs/index.html +11 -12
- package/docs/interfaces/IAVLTree.html +77 -77
- package/docs/interfaces/IAbstractBinaryTree.html +72 -72
- package/docs/interfaces/IAbstractBinaryTreeNode.html +14 -14
- package/docs/interfaces/IAbstractGraph.html +15 -15
- package/docs/interfaces/IBST.html +77 -77
- package/docs/interfaces/IDirectedGraph.html +23 -23
- package/docs/interfaces/IRBTree.html +77 -77
- package/docs/interfaces/IUNDirectedGraph.html +16 -16
- package/docs/types/AVLTreeNodeNested.html +1 -1
- package/docs/types/AVLTreeOptions.html +1 -1
- package/docs/types/AbstractBinaryTreeNodeNested.html +1 -1
- package/docs/types/AbstractBinaryTreeNodeProperties.html +1 -1
- package/docs/types/AbstractBinaryTreeNodeProperty.html +1 -1
- package/docs/types/AbstractBinaryTreeOptions.html +1 -1
- package/docs/types/BSTComparator.html +1 -1
- package/docs/types/BSTNodeNested.html +1 -1
- package/docs/types/BSTOptions.html +1 -1
- package/docs/types/BinaryTreeDeletedResult.html +1 -1
- package/docs/types/BinaryTreeNodeId.html +1 -1
- package/docs/types/BinaryTreeNodeNested.html +1 -1
- package/docs/types/BinaryTreeNodePropertyName.html +1 -1
- package/docs/types/BinaryTreeOptions.html +1 -1
- package/docs/types/DFSOrderPattern.html +1 -1
- package/docs/types/DijkstraResult.html +1 -1
- package/docs/types/Direction.html +1 -1
- package/docs/types/DummyAny.html +1 -1
- package/docs/types/EdgeId.html +1 -1
- package/docs/types/HeapOptions.html +1 -1
- package/docs/types/IAVLTreeNode.html +1 -1
- package/docs/types/IBSTNode.html +1 -1
- package/docs/types/IBinaryTree.html +1 -1
- package/docs/types/IBinaryTreeNode.html +1 -1
- package/docs/types/IRBTreeNode.html +1 -1
- package/docs/types/ITreeMultiset.html +1 -1
- package/docs/types/ITreeMultisetNode.html +1 -1
- package/docs/types/KeyValueObject.html +1 -1
- package/docs/types/KeyValueObjectWithId.html +1 -1
- package/docs/types/MapGraphCoordinate.html +1 -1
- package/docs/types/NavigatorParams.html +1 -1
- package/docs/types/NodeOrPropertyName.html +1 -1
- package/docs/types/NonNumberNonObjectButDefined.html +1 -1
- package/docs/types/ObjectWithNonNumberId.html +1 -1
- package/docs/types/ObjectWithNumberId.html +1 -1
- package/docs/types/ObjectWithoutId.html +1 -1
- package/docs/types/PriorityQueueComparator.html +1 -1
- package/docs/types/PriorityQueueDFSOrderPattern.html +1 -1
- package/docs/types/PriorityQueueOptions.html +1 -1
- package/docs/types/RBTreeNodeNested.html +1 -1
- package/docs/types/RBTreeOptions.html +1 -1
- package/docs/types/RestrictValById.html +1 -1
- package/docs/types/SegmentTreeNodeVal.html +1 -1
- package/docs/types/SpecifyOptional.html +1 -1
- package/docs/types/Thunk.html +1 -1
- package/docs/types/ToThunkFn.html +1 -1
- package/docs/types/TopologicalStatus.html +1 -1
- package/docs/types/TreeMultisetNodeNested.html +1 -1
- package/docs/types/TreeMultisetOptions.html +1 -1
- package/docs/types/TrlAsyncFn.html +1 -1
- package/docs/types/TrlFn.html +1 -1
- package/docs/types/Turning.html +1 -1
- package/docs/types/VertexId.html +1 -1
- package/docs/variables/THUNK_SYMBOL.html +1 -1
- package/jest.config.js +6 -3
- package/lib/data-structures/binary-tree/abstract-binary-tree.d.ts +169 -2
- package/lib/data-structures/binary-tree/abstract-binary-tree.js +31 -47
- package/package.json +40 -25
- package/src/data-structures/binary-tree/aa-tree.ts +1 -0
- package/src/data-structures/binary-tree/abstract-binary-tree.ts +1631 -0
- package/src/data-structures/binary-tree/avl-tree.ts +310 -0
- package/src/data-structures/binary-tree/b-tree.ts +1 -0
- package/src/data-structures/binary-tree/binary-indexed-tree.ts +76 -0
- package/src/data-structures/binary-tree/binary-tree.ts +47 -0
- package/src/data-structures/binary-tree/bst.ts +537 -0
- package/src/data-structures/binary-tree/index.ts +12 -0
- package/src/data-structures/binary-tree/rb-tree.ts +101 -0
- package/src/data-structures/binary-tree/segment-tree.ts +242 -0
- package/src/data-structures/binary-tree/splay-tree.ts +1 -0
- package/src/data-structures/binary-tree/tree-multiset.ts +700 -0
- package/src/data-structures/binary-tree/two-three-tree.ts +1 -0
- package/src/data-structures/diagrams/README.md +5 -0
- package/src/data-structures/graph/abstract-graph.ts +1040 -0
- package/src/data-structures/graph/directed-graph.ts +470 -0
- package/src/data-structures/graph/index.ts +4 -0
- package/src/data-structures/graph/map-graph.ts +129 -0
- package/src/data-structures/graph/undirected-graph.ts +274 -0
- package/src/data-structures/hash/coordinate-map.ts +67 -0
- package/src/data-structures/hash/coordinate-set.ts +56 -0
- package/src/data-structures/hash/hash-table.ts +1 -0
- package/src/data-structures/hash/index.ts +6 -0
- package/src/data-structures/hash/pair.ts +1 -0
- package/src/data-structures/hash/tree-map.ts +1 -0
- package/src/data-structures/hash/tree-set.ts +1 -0
- package/src/data-structures/heap/heap.ts +212 -0
- package/src/data-structures/heap/index.ts +3 -0
- package/src/data-structures/heap/max-heap.ts +31 -0
- package/src/data-structures/heap/min-heap.ts +32 -0
- package/src/data-structures/index.ts +11 -0
- package/src/data-structures/linked-list/doubly-linked-list.ts +573 -0
- package/src/data-structures/linked-list/index.ts +3 -0
- package/src/data-structures/linked-list/singly-linked-list.ts +501 -0
- package/src/data-structures/linked-list/skip-linked-list.ts +1 -0
- package/src/data-structures/matrix/index.ts +4 -0
- package/src/data-structures/matrix/matrix.ts +27 -0
- package/src/data-structures/matrix/matrix2d.ts +212 -0
- package/src/data-structures/matrix/navigator.ts +121 -0
- package/src/data-structures/matrix/vector2d.ts +316 -0
- package/src/data-structures/priority-queue/index.ts +3 -0
- package/src/data-structures/priority-queue/max-priority-queue.ts +56 -0
- package/src/data-structures/priority-queue/min-priority-queue.ts +57 -0
- package/src/data-structures/priority-queue/priority-queue.ts +359 -0
- package/src/data-structures/queue/deque.ts +297 -0
- package/src/data-structures/queue/index.ts +2 -0
- package/src/data-structures/queue/queue.ts +191 -0
- package/src/data-structures/stack/index.ts +1 -0
- package/src/data-structures/stack/stack.ts +98 -0
- package/src/data-structures/tree/index.ts +1 -0
- package/src/data-structures/tree/tree.ts +69 -0
- package/src/data-structures/trie/index.ts +1 -0
- package/src/data-structures/trie/trie.ts +225 -0
- package/src/index.ts +4 -0
- package/src/interfaces/abstract-binary-tree.ts +191 -0
- package/src/interfaces/abstract-graph.ts +31 -0
- package/src/interfaces/avl-tree.ts +25 -0
- package/src/interfaces/binary-tree.ts +6 -0
- package/src/interfaces/bst.ts +31 -0
- package/src/interfaces/directed-graph.ts +20 -0
- package/src/interfaces/doubly-linked-list.ts +1 -0
- package/src/interfaces/heap.ts +1 -0
- package/src/interfaces/index.ts +15 -0
- package/src/interfaces/navigator.ts +1 -0
- package/src/interfaces/priority-queue.ts +1 -0
- package/src/interfaces/rb-tree.ts +9 -0
- package/src/interfaces/segment-tree.ts +1 -0
- package/src/interfaces/singly-linked-list.ts +1 -0
- package/src/interfaces/tree-multiset.ts +7 -0
- package/src/interfaces/undirected-graph.ts +6 -0
- package/src/types/data-structures/abstract-binary-tree.ts +50 -0
- package/src/types/data-structures/abstract-graph.ts +11 -0
- package/src/types/data-structures/avl-tree.ts +5 -0
- package/src/types/data-structures/binary-tree.ts +5 -0
- package/src/types/data-structures/bst.ts +13 -0
- package/src/types/data-structures/directed-graph.ts +8 -0
- package/src/types/data-structures/doubly-linked-list.ts +1 -0
- package/src/types/data-structures/heap.ts +5 -0
- package/src/types/data-structures/index.ts +15 -0
- package/src/types/data-structures/map-graph.ts +1 -0
- package/src/types/data-structures/navigator.ts +13 -0
- package/src/types/data-structures/priority-queue.ts +9 -0
- package/src/types/data-structures/rb-tree.ts +8 -0
- package/src/types/data-structures/segment-tree.ts +1 -0
- package/src/types/data-structures/singly-linked-list.ts +1 -0
- package/src/types/data-structures/tree-multiset.ts +6 -0
- package/src/types/helpers.ts +1 -0
- package/src/types/index.ts +3 -0
- package/src/types/utils/index.ts +2 -0
- package/src/types/utils/utils.ts +6 -0
- package/src/types/utils/validate-type.ts +35 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/utils.ts +79 -0
- package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +1 -1
- package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +3 -1
- package/tsconfig.json +1 -1
- package/umd/bundle.min.js.map +1 -1
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* data-structure-typed
|
|
3
|
+
*
|
|
4
|
+
* @author Tyler Zeng
|
|
5
|
+
* @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
|
|
6
|
+
* @license MIT License
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type {SegmentTreeNodeVal} from '../../types';
|
|
10
|
+
|
|
11
|
+
export class SegmentTreeNode {
|
|
12
|
+
constructor(start: number, end: number, sum: number, val?: SegmentTreeNodeVal | null) {
|
|
13
|
+
this._start = start;
|
|
14
|
+
this._end = end;
|
|
15
|
+
this._sum = sum;
|
|
16
|
+
this._val = val || null;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
private _start = 0;
|
|
20
|
+
get start(): number {
|
|
21
|
+
return this._start;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
set start(v: number) {
|
|
25
|
+
this._start = v;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
private _end = 0;
|
|
29
|
+
|
|
30
|
+
get end(): number {
|
|
31
|
+
return this._end;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
set end(v: number) {
|
|
35
|
+
this._end = v;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
private _val: SegmentTreeNodeVal | null = null;
|
|
39
|
+
|
|
40
|
+
get val(): SegmentTreeNodeVal | null {
|
|
41
|
+
return this._val;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
set val(v: SegmentTreeNodeVal | null) {
|
|
45
|
+
this._val = v;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
private _sum = 0;
|
|
49
|
+
|
|
50
|
+
get sum(): number {
|
|
51
|
+
return this._sum;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
set sum(v: number) {
|
|
55
|
+
this._sum = v;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
private _left: SegmentTreeNode | null = null;
|
|
59
|
+
|
|
60
|
+
get left(): SegmentTreeNode | null {
|
|
61
|
+
return this._left;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
set left(v: SegmentTreeNode | null) {
|
|
65
|
+
this._left = v;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
private _right: SegmentTreeNode | null = null;
|
|
69
|
+
|
|
70
|
+
get right(): SegmentTreeNode | null {
|
|
71
|
+
return this._right;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
set right(v: SegmentTreeNode | null) {
|
|
75
|
+
this._right = v;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export class SegmentTree {
|
|
80
|
+
/**
|
|
81
|
+
* The constructor initializes the values, start, end, and root properties of an object.
|
|
82
|
+
* @param {number[]} values - An array of numbers that will be used to build a binary search tree.
|
|
83
|
+
* @param {number} [start] - The `start` parameter is the index of the first element in the `values` array that should
|
|
84
|
+
* be included in the range. If no value is provided for `start`, it defaults to 0, which means the range starts from
|
|
85
|
+
* the beginning of the array.
|
|
86
|
+
* @param {number} [end] - The "end" parameter is the index of the last element in the "values" array that should be
|
|
87
|
+
* included in the range. If not provided, it defaults to the index of the last element in the "values" array.
|
|
88
|
+
*/
|
|
89
|
+
constructor(values: number[], start?: number, end?: number) {
|
|
90
|
+
start = start || 0;
|
|
91
|
+
end = end || values.length - 1;
|
|
92
|
+
this._values = values;
|
|
93
|
+
this._start = start;
|
|
94
|
+
this._end = end;
|
|
95
|
+
this._root = this.build(start, end);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
private _values: number[] = [];
|
|
99
|
+
|
|
100
|
+
get values(): number[] {
|
|
101
|
+
return this._values;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
private _start = 0;
|
|
105
|
+
get start(): number {
|
|
106
|
+
return this._start;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
private _end: number;
|
|
110
|
+
|
|
111
|
+
get end(): number {
|
|
112
|
+
return this._end;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
private _root: SegmentTreeNode | null;
|
|
116
|
+
|
|
117
|
+
get root(): SegmentTreeNode | null {
|
|
118
|
+
return this._root;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* The function builds a segment tree by recursively dividing the given range into smaller segments and creating nodes
|
|
123
|
+
* for each segment.
|
|
124
|
+
* @param {number} start - The `start` parameter represents the starting index of the segment or range for which we are
|
|
125
|
+
* building the segment tree.
|
|
126
|
+
* @param {number} end - The `end` parameter represents the ending index of the segment or range for which we are
|
|
127
|
+
* building the segment tree.
|
|
128
|
+
* @returns a SegmentTreeNode object.
|
|
129
|
+
*/
|
|
130
|
+
build(start: number, end: number): SegmentTreeNode {
|
|
131
|
+
if (start === end) return new SegmentTreeNode(start, end, this._values[start]);
|
|
132
|
+
|
|
133
|
+
const mid = start + Math.floor((end - start) / 2);
|
|
134
|
+
const left = this.build(start, mid);
|
|
135
|
+
const right = this.build(mid + 1, end);
|
|
136
|
+
const cur = new SegmentTreeNode(start, end, left.sum + right.sum);
|
|
137
|
+
cur.left = left;
|
|
138
|
+
cur.right = right;
|
|
139
|
+
return cur;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* The function updates the value of a node in a segment tree and recalculates the sum of its children if they exist.
|
|
144
|
+
* @param {number} index - The index parameter represents the index of the node in the segment tree that needs to be
|
|
145
|
+
* updated.
|
|
146
|
+
* @param {number} sum - The `sum` parameter represents the new value that should be assigned to the `sum` property of
|
|
147
|
+
* the `SegmentTreeNode` at the specified `index`.
|
|
148
|
+
* @param {SegmentTreeNodeVal} [val] - The `val` parameter is an optional value that can be assigned to the `val`
|
|
149
|
+
* property of the `SegmentTreeNode` object. It is not currently used in the code, but you can uncomment the line `//
|
|
150
|
+
* cur.val = val;` and pass a value for `val` in the
|
|
151
|
+
* @returns The function does not return anything.
|
|
152
|
+
*/
|
|
153
|
+
updateNode(index: number, sum: number, val?: SegmentTreeNodeVal) {
|
|
154
|
+
const root = this.root || null;
|
|
155
|
+
if (!root) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const dfs = (cur: SegmentTreeNode, index: number, sum: number, val?: SegmentTreeNodeVal) => {
|
|
159
|
+
if (cur.start === cur.end && cur.start === index) {
|
|
160
|
+
cur.sum = sum;
|
|
161
|
+
if (val !== undefined) cur.val = val;
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const mid = cur.start + Math.floor((cur.end - cur.start) / 2);
|
|
165
|
+
if (index <= mid) {
|
|
166
|
+
if (cur.left) {
|
|
167
|
+
dfs(cur.left, index, sum, val);
|
|
168
|
+
}
|
|
169
|
+
} else {
|
|
170
|
+
if (cur.right) {
|
|
171
|
+
dfs(cur.right, index, sum, val);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (cur.left && cur.right) {
|
|
175
|
+
cur.sum = cur.left.sum + cur.right.sum;
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
dfs(root, index, sum, val);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* The function `querySumByRange` calculates the sum of values within a given range in a segment tree.
|
|
184
|
+
* @param {number} indexA - The starting index of the range for which you want to calculate the sum.
|
|
185
|
+
* @param {number} indexB - The parameter `indexB` represents the ending index of the range for which you want to
|
|
186
|
+
* calculate the sum.
|
|
187
|
+
* @returns The function `querySumByRange` returns a number.
|
|
188
|
+
*/
|
|
189
|
+
querySumByRange(indexA: number, indexB: number): number {
|
|
190
|
+
const root = this.root || null;
|
|
191
|
+
if (!root) {
|
|
192
|
+
return 0;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
const dfs = (cur: SegmentTreeNode, i: number, j: number): number => {
|
|
196
|
+
if (cur.start === i && cur.end === j) {
|
|
197
|
+
return cur.sum;
|
|
198
|
+
}
|
|
199
|
+
const mid = cur.start + Math.floor((cur.end - cur.start) / 2);
|
|
200
|
+
if (j <= mid) {
|
|
201
|
+
// TODO after no-non-null-assertion not ensure the logic
|
|
202
|
+
if (cur.left) {
|
|
203
|
+
return dfs(cur.left, i, j);
|
|
204
|
+
} else {
|
|
205
|
+
return NaN;
|
|
206
|
+
}
|
|
207
|
+
} else if (i > mid) {
|
|
208
|
+
// TODO after no-non-null-assertion not ensure the logic
|
|
209
|
+
if (cur.right) {
|
|
210
|
+
// TODO after no-non-null-assertion not ensure the logic
|
|
211
|
+
return dfs(cur.right, i, j);
|
|
212
|
+
} else {
|
|
213
|
+
return NaN;
|
|
214
|
+
}
|
|
215
|
+
} else {
|
|
216
|
+
// TODO after no-non-null-assertion not ensure the logic
|
|
217
|
+
if (cur.left && cur.right) {
|
|
218
|
+
return dfs(cur.left, i, mid) + dfs(cur.right, mid + 1, j);
|
|
219
|
+
} else {
|
|
220
|
+
return NaN;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
return dfs(root, indexA, indexB);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
protected _setValues(value: number[]) {
|
|
228
|
+
this._values = value;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
protected _setStart(value: number) {
|
|
232
|
+
this._start = value;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
protected _setEnd(value: number) {
|
|
236
|
+
this._end = value;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
protected _setRoot(v: SegmentTreeNode | null) {
|
|
240
|
+
this._root = v;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export class SplayTree {}
|