data-structure-typed 1.15.1 → 1.16.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 +398 -27
- package/dist/data-structures/binary-tree/binary-tree.d.ts +30 -30
- package/dist/data-structures/binary-tree/binary-tree.js +55 -55
- package/dist/data-structures/binary-tree/segment-tree.d.ts +17 -17
- package/dist/data-structures/binary-tree/segment-tree.js +30 -30
- package/dist/data-structures/graph/abstract-graph.d.ts +6 -6
- package/dist/data-structures/graph/abstract-graph.js +6 -6
- package/dist/data-structures/graph/directed-graph.d.ts +4 -4
- package/dist/data-structures/graph/directed-graph.js +6 -6
- package/dist/data-structures/graph/undirected-graph.d.ts +3 -3
- package/dist/data-structures/hash/coordinate-map.d.ts +2 -2
- package/dist/data-structures/hash/coordinate-set.d.ts +2 -2
- package/dist/data-structures/heap/heap.d.ts +40 -25
- package/dist/data-structures/heap/heap.js +72 -27
- package/dist/data-structures/heap/max-heap.d.ts +3 -3
- package/dist/data-structures/heap/min-heap.d.ts +3 -3
- package/dist/data-structures/index.d.ts +1 -0
- package/dist/data-structures/index.js +1 -0
- package/dist/data-structures/linked-list/doubly-linked-list.d.ts +9 -9
- package/dist/data-structures/linked-list/doubly-linked-list.js +12 -12
- package/dist/data-structures/linked-list/singly-linked-list.d.ts +7 -7
- package/dist/data-structures/priority-queue/max-priority-queue.d.ts +4 -5
- package/dist/data-structures/priority-queue/max-priority-queue.js +30 -6
- package/dist/data-structures/priority-queue/min-priority-queue.d.ts +4 -5
- package/dist/data-structures/priority-queue/min-priority-queue.js +31 -6
- package/dist/data-structures/priority-queue/priority-queue.d.ts +20 -9
- package/dist/data-structures/priority-queue/priority-queue.js +34 -28
- package/dist/data-structures/queue/deque.d.ts +1 -1
- package/dist/data-structures/tree/index.d.ts +1 -0
- package/dist/data-structures/tree/index.js +17 -0
- package/dist/data-structures/tree/tree.d.ts +9 -0
- package/dist/data-structures/tree/tree.js +52 -0
- package/dist/data-structures/types/heap.d.ts +0 -4
- package/dist/utils/types/utils.d.ts +1 -3
- package/dist/utils/types/utils.js +0 -14
- package/dist/utils/utils.js +0 -197
- package/docs/.nojekyll +1 -0
- package/docs/assets/highlight.css +92 -0
- package/docs/assets/main.js +58 -0
- package/docs/assets/search.js +1 -0
- package/docs/assets/style.css +1367 -0
- package/docs/classes/AVLTree.html +2192 -0
- package/docs/classes/AVLTreeNode.html +574 -0
- package/docs/classes/AaTree.html +150 -0
- package/docs/classes/AbstractEdge.html +269 -0
- package/docs/classes/AbstractGraph.html +927 -0
- package/docs/classes/AbstractVertex.html +215 -0
- package/docs/classes/ArrayDeque.html +417 -0
- package/docs/classes/BST.html +2038 -0
- package/docs/classes/BSTNode.html +570 -0
- package/docs/classes/BTree.html +150 -0
- package/docs/classes/BinaryIndexedTree.html +289 -0
- package/docs/classes/BinaryTree.html +1827 -0
- package/docs/classes/BinaryTreeNode.html +533 -0
- package/docs/classes/Character.html +198 -0
- package/docs/classes/CoordinateMap.html +469 -0
- package/docs/classes/CoordinateSet.html +430 -0
- package/docs/classes/Deque.html +767 -0
- package/docs/classes/DirectedEdge.html +354 -0
- package/docs/classes/DirectedGraph.html +1243 -0
- package/docs/classes/DirectedVertex.html +226 -0
- package/docs/classes/DoublyLinkedList.html +733 -0
- package/docs/classes/DoublyLinkedListNode.html +258 -0
- package/docs/classes/Heap.html +482 -0
- package/docs/classes/HeapItem.html +233 -0
- package/docs/classes/Matrix2D.html +480 -0
- package/docs/classes/MatrixNTI2D.html +218 -0
- package/docs/classes/MaxHeap.html +500 -0
- package/docs/classes/MaxPriorityQueue.html +809 -0
- package/docs/classes/MinHeap.html +501 -0
- package/docs/classes/MinPriorityQueue.html +811 -0
- package/docs/classes/Navigator.html +291 -0
- package/docs/classes/ObjectDeque.html +423 -0
- package/docs/classes/PriorityQueue.html +733 -0
- package/docs/classes/Queue.html +370 -0
- package/docs/classes/RBTree.html +150 -0
- package/docs/classes/SegmentTree.html +345 -0
- package/docs/classes/SegmentTreeNode.html +418 -0
- package/docs/classes/SinglyLinkedList.html +1105 -0
- package/docs/classes/SinglyLinkedListNode.html +375 -0
- package/docs/classes/SplayTree.html +150 -0
- package/docs/classes/Stack.html +346 -0
- package/docs/classes/TreeMultiSet.html +2036 -0
- package/docs/classes/TreeNode.html +236 -0
- package/docs/classes/Trie.html +350 -0
- package/docs/classes/TrieNode.html +258 -0
- package/docs/classes/TwoThreeTree.html +150 -0
- package/docs/classes/UndirectedEdge.html +313 -0
- package/docs/classes/UndirectedGraph.html +1080 -0
- package/docs/classes/UndirectedVertex.html +226 -0
- package/docs/classes/Vector2D.html +783 -0
- package/docs/enums/CP.html +159 -0
- package/docs/enums/FamilyPosition.html +159 -0
- package/docs/enums/LoopType.html +160 -0
- package/docs/index.html +494 -0
- package/docs/interfaces/AVLTreeDeleted.html +161 -0
- package/docs/interfaces/BinaryTreeNodeObj.html +168 -0
- package/docs/interfaces/HeapOptions.html +167 -0
- package/docs/interfaces/IDirectedGraph.html +243 -0
- package/docs/interfaces/IGraph.html +427 -0
- package/docs/interfaces/NavigatorParams.html +197 -0
- package/docs/interfaces/PriorityQueueOptions.html +168 -0
- package/docs/modules.html +218 -0
- package/docs/types/BSTComparator.html +140 -0
- package/docs/types/BSTDeletedResult.html +137 -0
- package/docs/types/BinaryTreeDeleted.html +137 -0
- package/docs/types/BinaryTreeNodeId.html +125 -0
- package/docs/types/BinaryTreeNodePropertyName.html +125 -0
- package/docs/types/DFSOrderPattern.html +125 -0
- package/docs/types/DijkstraResult.html +145 -0
- package/docs/types/Direction.html +125 -0
- package/docs/types/DoublyLinkedListGetBy.html +125 -0
- package/docs/types/NodeOrPropertyName.html +125 -0
- package/docs/types/PriorityQueueComparator.html +145 -0
- package/docs/types/PriorityQueueDFSOrderPattern.html +125 -0
- package/docs/types/ResultByProperty.html +130 -0
- package/docs/types/ResultsByProperty.html +130 -0
- package/docs/types/SegmentTreeNodeVal.html +125 -0
- package/docs/types/SpecifyOptional.html +132 -0
- package/docs/types/Thunk.html +133 -0
- package/docs/types/ToThunkFn.html +133 -0
- package/docs/types/TopologicalStatus.html +125 -0
- package/docs/types/TreeMultiSetDeletedResult.html +137 -0
- package/docs/types/TrlAsyncFn.html +138 -0
- package/docs/types/TrlFn.html +138 -0
- package/docs/types/Turning.html +125 -0
- package/docs/types/VertexId.html +125 -0
- package/{tests/unit/data-structures/binary-tree → notes}/bst.test.ts +11 -15
- package/notes/note.md +23 -0
- package/package.json +2 -4
- package/.idea/data-structure-typed.iml +0 -14
- package/.idea/modules.xml +0 -8
- package/.idea/vcs.xml +0 -6
- package/src/assets/complexities-diff.jpg +0 -0
- package/src/assets/data-structure-complexities.jpg +0 -0
- package/src/assets/logo.png +0 -0
- package/src/data-structures/binary-tree/aa-tree.ts +0 -3
- package/src/data-structures/binary-tree/avl-tree.ts +0 -293
- package/src/data-structures/binary-tree/b-tree.ts +0 -3
- package/src/data-structures/binary-tree/binary-indexed-tree.ts +0 -69
- package/src/data-structures/binary-tree/binary-tree.ts +0 -1485
- package/src/data-structures/binary-tree/bst.ts +0 -497
- package/src/data-structures/binary-tree/diagrams/avl-tree-inserting.gif +0 -0
- package/src/data-structures/binary-tree/diagrams/bst-rotation.gif +0 -0
- package/src/data-structures/binary-tree/diagrams/segment-tree.png +0 -0
- package/src/data-structures/binary-tree/index.ts +0 -11
- package/src/data-structures/binary-tree/rb-tree.ts +0 -3
- package/src/data-structures/binary-tree/segment-tree.ts +0 -248
- package/src/data-structures/binary-tree/splay-tree.ts +0 -3
- package/src/data-structures/binary-tree/tree-multiset.ts +0 -53
- package/src/data-structures/binary-tree/two-three-tree.ts +0 -3
- package/src/data-structures/diagrams/README.md +0 -5
- package/src/data-structures/graph/abstract-graph.ts +0 -956
- package/src/data-structures/graph/diagrams/adjacency-list-pros-cons.jpg +0 -0
- package/src/data-structures/graph/diagrams/adjacency-list.jpg +0 -0
- package/src/data-structures/graph/diagrams/adjacency-matrix-pros-cons.jpg +0 -0
- package/src/data-structures/graph/diagrams/adjacency-matrix.jpg +0 -0
- package/src/data-structures/graph/diagrams/dfs-can-do.jpg +0 -0
- package/src/data-structures/graph/diagrams/edge-list-pros-cons.jpg +0 -0
- package/src/data-structures/graph/diagrams/edge-list.jpg +0 -0
- package/src/data-structures/graph/diagrams/max-flow.jpg +0 -0
- package/src/data-structures/graph/diagrams/mst.jpg +0 -0
- package/src/data-structures/graph/diagrams/tarjan-articulation-point-bridge.png +0 -0
- package/src/data-structures/graph/diagrams/tarjan-complicate-simple.png +0 -0
- package/src/data-structures/graph/diagrams/tarjan-strongly-connected-component.png +0 -0
- package/src/data-structures/graph/diagrams/tarjan.mp4 +0 -0
- package/src/data-structures/graph/diagrams/tarjan.webp +0 -0
- package/src/data-structures/graph/directed-graph.ts +0 -424
- package/src/data-structures/graph/index.ts +0 -3
- package/src/data-structures/graph/undirected-graph.ts +0 -254
- package/src/data-structures/hash/coordinate-map.ts +0 -71
- package/src/data-structures/hash/coordinate-set.ts +0 -60
- package/src/data-structures/hash/hash-table.ts +0 -1
- package/src/data-structures/hash/index.ts +0 -6
- package/src/data-structures/hash/pair.ts +0 -1
- package/src/data-structures/hash/tree-map.ts +0 -1
- package/src/data-structures/hash/tree-set.ts +0 -1
- package/src/data-structures/heap/heap.ts +0 -156
- package/src/data-structures/heap/index.ts +0 -3
- package/src/data-structures/heap/max-heap.ts +0 -31
- package/src/data-structures/heap/min-heap.ts +0 -34
- package/src/data-structures/index.ts +0 -13
- package/src/data-structures/linked-list/doubly-linked-list.ts +0 -351
- package/src/data-structures/linked-list/index.ts +0 -2
- package/src/data-structures/linked-list/singly-linked-list.ts +0 -748
- package/src/data-structures/linked-list/skip-linked-list.ts +0 -1
- package/src/data-structures/matrix/index.ts +0 -4
- package/src/data-structures/matrix/matrix.ts +0 -27
- package/src/data-structures/matrix/matrix2d.ts +0 -208
- package/src/data-structures/matrix/navigator.ts +0 -122
- package/src/data-structures/matrix/vector2d.ts +0 -316
- package/src/data-structures/priority-queue/index.ts +0 -3
- package/src/data-structures/priority-queue/max-priority-queue.ts +0 -24
- package/src/data-structures/priority-queue/min-priority-queue.ts +0 -24
- package/src/data-structures/priority-queue/priority-queue.ts +0 -346
- package/src/data-structures/queue/deque.ts +0 -241
- package/src/data-structures/queue/index.ts +0 -2
- package/src/data-structures/queue/queue.ts +0 -120
- package/src/data-structures/stack/index.ts +0 -1
- package/src/data-structures/stack/stack.ts +0 -98
- package/src/data-structures/trie/index.ts +0 -1
- package/src/data-structures/trie/trie.ts +0 -225
- package/src/data-structures/types/abstract-graph.ts +0 -51
- package/src/data-structures/types/avl-tree.ts +0 -6
- package/src/data-structures/types/binary-tree.ts +0 -15
- package/src/data-structures/types/bst.ts +0 -5
- package/src/data-structures/types/directed-graph.ts +0 -18
- package/src/data-structures/types/doubly-linked-list.ts +0 -1
- package/src/data-structures/types/heap.ts +0 -8
- package/src/data-structures/types/index.ts +0 -13
- package/src/data-structures/types/navigator.ts +0 -13
- package/src/data-structures/types/priority-queue.ts +0 -9
- package/src/data-structures/types/segment-tree.ts +0 -1
- package/src/data-structures/types/singly-linked-list.ts +0 -1
- package/src/data-structures/types/tree-multiset.ts +0 -3
- package/src/index.ts +0 -1
- package/src/utils/index.ts +0 -2
- package/src/utils/types/index.ts +0 -1
- package/src/utils/types/utils.ts +0 -176
- package/src/utils/utils.ts +0 -290
- package/tests/unit/data-structures/graph/abstract-graph.ts +0 -0
- package/tests/unit/data-structures/graph/directed-graph.test.ts +0 -495
- package/tests/unit/data-structures/graph/index.ts +0 -3
- package/tests/unit/data-structures/graph/undirected-graph.ts +0 -0
package/README.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
|
+
# What
|
|
1
2
|
|
|
2
|
-
|
|
3
|
+
## Brief
|
|
4
|
+
Javascript & TypeScript Data Structure Library.
|
|
5
|
+
|
|
6
|
+
Meticulously crafted to empower developers with a versatile set of essential data structures. Our library includes a
|
|
7
|
+
wide range of data structures
|
|
8
|
+
|
|
9
|
+
## Data Structures
|
|
10
|
+
|
|
11
|
+
Binary Tree, Binary Search Tree (BST), AVL Tree, Tree Multiset, Segment Tree, Binary Indexed Tree, Graph, Directed
|
|
12
|
+
Graph, Undirected Graph, Linked List, Singly Linked List, Doubly Linked List, Queue, Object Deque, Array Deque, Stack,
|
|
13
|
+
Hash, Coordinate Set, Coordinate Map, Heap, Priority Queue, Max Priority Queue, Min Priority Queue, Trie
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# How
|
|
17
|
+
|
|
18
|
+
## Live Examples
|
|
19
|
+
|
|
20
|
+
[Live Examples](https://data-structure-typed-examples.vercel.app)
|
|
21
|
+
|
|
22
|
+
<a href="https://data-structure-typed-examples.vercel.app" target="_blank">Live Examples</a>
|
|
3
23
|
|
|
4
24
|
## install
|
|
5
25
|
|
|
@@ -15,19 +35,368 @@ yarn add data-structure-typed
|
|
|
15
35
|
npm install data-structure-typed
|
|
16
36
|
```
|
|
17
37
|
|
|
18
|
-
|
|
38
|
+
### Binary Search Tree (BST) snippet
|
|
19
39
|
|
|
20
|
-
|
|
40
|
+
```typescript
|
|
41
|
+
import {BST, BSTNode} from 'data-structure-typed';
|
|
21
42
|
|
|
22
|
-
|
|
43
|
+
const tree = new BST();
|
|
44
|
+
expect(tree).toBeInstanceOf(BST);
|
|
23
45
|
|
|
24
|
-
|
|
46
|
+
const ids = [11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];
|
|
47
|
+
tree.addMany(ids);
|
|
48
|
+
expect(tree.root).toBeInstanceOf(BSTNode);
|
|
49
|
+
if (tree.root) expect(tree.root.id).toBe(11);
|
|
50
|
+
expect(tree.count).toBe(16);
|
|
51
|
+
expect(tree.has(6)).toBe(true);
|
|
25
52
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
53
|
+
const node6 = tree.get(6);
|
|
54
|
+
expect(node6 && tree.getHeight(node6)).toBe(2);
|
|
55
|
+
expect(node6 && tree.getDepth(node6)).toBe(3);
|
|
56
|
+
|
|
57
|
+
const nodeId10 = tree.get(10, 'id');
|
|
58
|
+
expect(nodeId10?.id).toBe(10);
|
|
59
|
+
|
|
60
|
+
const nodeVal9 = tree.get(9, 'val');
|
|
61
|
+
expect(nodeVal9?.id).toBe(9);
|
|
62
|
+
|
|
63
|
+
const nodesByCount1 = tree.getNodes(1, 'count');
|
|
64
|
+
expect(nodesByCount1.length).toBe(16);
|
|
65
|
+
|
|
66
|
+
const leftMost = tree.getLeftMost();
|
|
67
|
+
expect(leftMost?.id).toBe(1);
|
|
68
|
+
|
|
69
|
+
const node15 = tree.get(15);
|
|
70
|
+
const minNodeBySpecificNode = node15 && tree.getLeftMost(node15);
|
|
71
|
+
expect(minNodeBySpecificNode?.id).toBe(12);
|
|
72
|
+
|
|
73
|
+
const subTreeSum = node15 && tree.subTreeSum(node15);
|
|
74
|
+
expect(subTreeSum).toBe(70);
|
|
75
|
+
|
|
76
|
+
const lesserSum = tree.lesserSum(10);
|
|
77
|
+
expect(lesserSum).toBe(45);
|
|
78
|
+
|
|
79
|
+
expect(node15).toBeInstanceOf(BSTNode);
|
|
80
|
+
if (node15 instanceof BSTNode) {
|
|
81
|
+
const subTreeAdd = tree.subTreeAdd(node15, 1, 'count');
|
|
82
|
+
expect(subTreeAdd).toBeDefined();
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const node11 = tree.get(11);
|
|
86
|
+
expect(node11).toBeInstanceOf(BSTNode);
|
|
87
|
+
if (node11 instanceof BSTNode) {
|
|
88
|
+
const allGreaterNodesAdded = tree.allGreaterNodesAdd(node11, 2, 'count');
|
|
89
|
+
expect(allGreaterNodesAdded).toBeDefined();
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const dfsInorderNodes = tree.DFS('in', 'node');
|
|
93
|
+
expect(dfsInorderNodes[0].id).toBe(1);
|
|
94
|
+
expect(dfsInorderNodes[dfsInorderNodes.length - 1].id).toBe(16);
|
|
95
|
+
|
|
96
|
+
tree.balance();
|
|
97
|
+
expect(tree.isBalanced()).toBe(true);
|
|
98
|
+
|
|
99
|
+
const bfsNodesAfterBalanced = tree.BFS('node');
|
|
100
|
+
expect(bfsNodesAfterBalanced[0].id).toBe(8);
|
|
101
|
+
expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].id).toBe(16);
|
|
102
|
+
|
|
103
|
+
const removed11 = tree.remove(11, true);
|
|
104
|
+
expect(removed11).toBeInstanceOf(Array);
|
|
105
|
+
expect(removed11[0]).toBeDefined();
|
|
106
|
+
expect(removed11[0].deleted).toBeDefined();
|
|
107
|
+
|
|
108
|
+
if (removed11[0].deleted) expect(removed11[0].deleted.id).toBe(11);
|
|
109
|
+
|
|
110
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
111
|
+
|
|
112
|
+
expect(node15 && tree.getHeight(node15)).toBe(2);
|
|
113
|
+
|
|
114
|
+
const removed1 = tree.remove(1, true);
|
|
115
|
+
expect(removed1).toBeInstanceOf(Array);
|
|
116
|
+
expect(removed1[0]).toBeDefined();
|
|
117
|
+
expect(removed1[0].deleted).toBeDefined();
|
|
118
|
+
if (removed1[0].deleted) expect(removed1[0].deleted.id).toBe(1);
|
|
119
|
+
|
|
120
|
+
expect(tree.isAVLBalanced()).toBe(true);
|
|
121
|
+
|
|
122
|
+
expect(tree.getHeight()).toBe(4);
|
|
123
|
+
|
|
124
|
+
// The code for removing these nodes (4, 10, 15, 5, 13, 3, 8, 6, 7, 9, 14) in sequence has been omitted.
|
|
125
|
+
|
|
126
|
+
expect(tree.isAVLBalanced()).toBe(false);
|
|
127
|
+
|
|
128
|
+
const bfsIDs = tree.BFS();
|
|
129
|
+
expect(bfsIDs[0]).toBe(2);
|
|
130
|
+
expect(bfsIDs[1]).toBe(12);
|
|
131
|
+
expect(bfsIDs[2]).toBe(16);
|
|
132
|
+
|
|
133
|
+
const bfsNodes = tree.BFS('node');
|
|
134
|
+
expect(bfsNodes[0].id).toBe(2);
|
|
135
|
+
expect(bfsNodes[1].id).toBe(12);
|
|
136
|
+
expect(bfsNodes[2].id).toBe(16);
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Directed Graph simple snippet
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
import {DirectedGraph, DirectedVertex, DirectedEdge, VertexId} from 'data-structure-typed';
|
|
143
|
+
|
|
144
|
+
let graph: DirectedGraph<DirectedVertex, DirectedEdge>;
|
|
145
|
+
|
|
146
|
+
beforeEach(() => {
|
|
147
|
+
graph = new DirectedGraph();
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
it('should add vertices', () => {
|
|
152
|
+
const vertex1 = new DirectedVertex('A');
|
|
153
|
+
const vertex2 = new DirectedVertex('B');
|
|
154
|
+
|
|
155
|
+
graph.addVertex(vertex1);
|
|
156
|
+
graph.addVertex(vertex2);
|
|
157
|
+
|
|
158
|
+
expect(graph.hasVertex(vertex1)).toBe(true);
|
|
159
|
+
expect(graph.hasVertex(vertex2)).toBe(true);
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
it('should add edges', () => {
|
|
163
|
+
const vertex1 = new DirectedVertex('A');
|
|
164
|
+
const vertex2 = new DirectedVertex('B');
|
|
165
|
+
const edge = new DirectedEdge('A', 'B');
|
|
166
|
+
|
|
167
|
+
graph.addVertex(vertex1);
|
|
168
|
+
graph.addVertex(vertex2);
|
|
169
|
+
graph.addEdge(edge);
|
|
170
|
+
|
|
171
|
+
expect(graph.hasEdge('A', 'B')).toBe(true);
|
|
172
|
+
expect(graph.hasEdge('B', 'A')).toBe(false);
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
it('should remove edges', () => {
|
|
176
|
+
const vertex1 = new DirectedVertex('A');
|
|
177
|
+
const vertex2 = new DirectedVertex('B');
|
|
178
|
+
const edge = new DirectedEdge('A', 'B');
|
|
179
|
+
|
|
180
|
+
graph.addVertex(vertex1);
|
|
181
|
+
graph.addVertex(vertex2);
|
|
182
|
+
graph.addEdge(edge);
|
|
183
|
+
|
|
184
|
+
expect(graph.removeEdge(edge)).toBe(edge);
|
|
185
|
+
expect(graph.hasEdge('A', 'B')).toBe(false);
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
it('should perform topological sort', () => {
|
|
189
|
+
const vertexA = new DirectedVertex('A');
|
|
190
|
+
const vertexB = new DirectedVertex('B');
|
|
191
|
+
const vertexC = new DirectedVertex('C');
|
|
192
|
+
const edgeAB = new DirectedEdge('A', 'B');
|
|
193
|
+
const edgeBC = new DirectedEdge('B', 'C');
|
|
194
|
+
|
|
195
|
+
graph.addVertex(vertexA);
|
|
196
|
+
graph.addVertex(vertexB);
|
|
197
|
+
graph.addVertex(vertexC);
|
|
198
|
+
graph.addEdge(edgeAB);
|
|
199
|
+
graph.addEdge(edgeBC);
|
|
200
|
+
|
|
201
|
+
const topologicalOrder = graph.topologicalSort();
|
|
202
|
+
if (topologicalOrder) expect(topologicalOrder.map(v => v.id)).toEqual(['A', 'B', 'C']);
|
|
203
|
+
});
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### Directed Graph complex snippet
|
|
207
|
+
|
|
208
|
+
```typescript
|
|
209
|
+
import {DirectedGraph, DirectedVertex, DirectedEdge, VertexId} from 'data-structure-typed';
|
|
210
|
+
|
|
211
|
+
class MyVertex extends DirectedVertex {
|
|
212
|
+
private _data: string;
|
|
213
|
+
get data(): string {
|
|
214
|
+
return this._data;
|
|
215
|
+
}
|
|
216
|
+
set data(value: string) {
|
|
217
|
+
this._data = value;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
constructor(id: VertexId, data: string) {
|
|
221
|
+
super(id);
|
|
222
|
+
this._data = data;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
class MyEdge extends DirectedEdge {
|
|
227
|
+
private _data: string;
|
|
228
|
+
get data(): string {
|
|
229
|
+
return this._data;
|
|
230
|
+
}
|
|
231
|
+
set data(value: string) {
|
|
232
|
+
this._data = value;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
constructor(v1: VertexId, v2: VertexId, weight: number, data: string) {
|
|
236
|
+
super(v1, v2, weight);
|
|
237
|
+
this._data = data;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
describe('DirectedGraph Test3', () => {
|
|
242
|
+
const myGraph = new DirectedGraph<MyVertex, MyEdge>();
|
|
243
|
+
|
|
244
|
+
it('should test graph operations', () => {
|
|
245
|
+
const vertex1 = new MyVertex(1, 'data1');
|
|
246
|
+
const vertex2 = new MyVertex(2, 'data2');
|
|
247
|
+
const vertex3 = new MyVertex(3, 'data3');
|
|
248
|
+
const vertex4 = new MyVertex(4, 'data4');
|
|
249
|
+
const vertex5 = new MyVertex(5, 'data5');
|
|
250
|
+
const vertex6 = new MyVertex(6, 'data6');
|
|
251
|
+
const vertex7 = new MyVertex(7, 'data7');
|
|
252
|
+
const vertex8 = new MyVertex(8, 'data8');
|
|
253
|
+
const vertex9 = new MyVertex(9, 'data9');
|
|
254
|
+
myGraph.addVertex(vertex1);
|
|
255
|
+
myGraph.addVertex(vertex2);
|
|
256
|
+
myGraph.addVertex(vertex3);
|
|
257
|
+
myGraph.addVertex(vertex4);
|
|
258
|
+
myGraph.addVertex(vertex5);
|
|
259
|
+
myGraph.addVertex(vertex6);
|
|
260
|
+
myGraph.addVertex(vertex7);
|
|
261
|
+
myGraph.addVertex(vertex8);
|
|
262
|
+
myGraph.addVertex(vertex9);
|
|
263
|
+
|
|
264
|
+
myGraph.addEdge(new MyEdge(1, 2, 10, 'edge-data1-2'));
|
|
265
|
+
myGraph.addEdge(new MyEdge(2, 1, 20, 'edge-data2-1'));
|
|
266
|
+
|
|
267
|
+
expect(myGraph.getEdge(1, 2)).toBeTruthy();
|
|
268
|
+
expect(myGraph.getEdge(2, 1)).toBeTruthy();
|
|
269
|
+
expect(myGraph.getEdge(1, '100')).toBeFalsy();
|
|
270
|
+
|
|
271
|
+
myGraph.removeEdgeBetween(1, 2);
|
|
272
|
+
expect(myGraph.getEdge(1, 2)).toBeFalsy();
|
|
273
|
+
|
|
274
|
+
myGraph.addEdge(new MyEdge(3, 1, 3, 'edge-data-3-1'));
|
|
275
|
+
myGraph.addEdge(new MyEdge(1, 9, 19, 'edge-data1-9'));
|
|
276
|
+
myGraph.addEdge(new MyEdge(9, 7, 97, 'edge-data9-7'));
|
|
277
|
+
myGraph.addEdge(new MyEdge(7, 9, 79, 'edge-data7-9'));
|
|
278
|
+
myGraph.addEdge(new MyEdge(1, 4, 14, 'edge-data1-4'));
|
|
279
|
+
myGraph.addEdge(new MyEdge(4, 7, 47, 'edge-data4-7'));
|
|
280
|
+
myGraph.addEdge(new MyEdge(1, 2, 12, 'edge-data1-2'));
|
|
281
|
+
myGraph.addEdge(new MyEdge(2, 3, 23, 'edge-data2-3'));
|
|
282
|
+
myGraph.addEdge(new MyEdge(3, 5, 35, 'edge-data3-5'));
|
|
283
|
+
myGraph.addEdge(new MyEdge(5, 7, 57, 'edge-data5-7'));
|
|
284
|
+
myGraph.addEdge(new MyEdge(7, 3, 73, 'edge-data7-3'));
|
|
285
|
+
|
|
286
|
+
const topologicalSorted = myGraph.topologicalSort();
|
|
287
|
+
expect(topologicalSorted).toBeNull();
|
|
288
|
+
|
|
289
|
+
const minPath1to7 = myGraph.getMinPathBetween(1, 7);
|
|
290
|
+
expect(minPath1to7).toBeInstanceOf(Array);
|
|
291
|
+
if (minPath1to7 && minPath1to7.length > 0) {
|
|
292
|
+
expect(minPath1to7).toHaveLength(3);
|
|
293
|
+
expect(minPath1to7[0]).toBeInstanceOf(MyVertex);
|
|
294
|
+
expect(minPath1to7[0].id).toBe(1);
|
|
295
|
+
expect(minPath1to7[1].id).toBe(9);
|
|
296
|
+
expect(minPath1to7[2].id).toBe(7);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
const fordResult1 = myGraph.bellmanFord(1);
|
|
300
|
+
expect(fordResult1).toBeTruthy();
|
|
301
|
+
expect(fordResult1.hasNegativeCycle).toBeUndefined();
|
|
302
|
+
const {distMap, preMap, paths, min, minPath} = fordResult1;
|
|
303
|
+
expect(distMap).toBeInstanceOf(Map);
|
|
304
|
+
expect(distMap.size).toBe(9);
|
|
305
|
+
expect(distMap.get(vertex1)).toBe(0);
|
|
306
|
+
expect(distMap.get(vertex2)).toBe(12);
|
|
307
|
+
expect(distMap.get(vertex3)).toBe(35);
|
|
308
|
+
expect(distMap.get(vertex4)).toBe(14);
|
|
309
|
+
expect(distMap.get(vertex5)).toBe(70);
|
|
310
|
+
expect(distMap.get(vertex6)).toBe(Infinity);
|
|
311
|
+
expect(distMap.get(vertex7)).toBe(61);
|
|
312
|
+
expect(distMap.get(vertex8)).toBe(Infinity);
|
|
313
|
+
expect(distMap.get(vertex9)).toBe(19);
|
|
314
|
+
|
|
315
|
+
expect(preMap).toBeInstanceOf(Map);
|
|
316
|
+
expect(preMap.size).toBe(0);
|
|
317
|
+
|
|
318
|
+
expect(paths).toBeInstanceOf(Array);
|
|
319
|
+
expect(paths.length).toBe(0);
|
|
320
|
+
expect(min).toBe(Infinity);
|
|
321
|
+
expect(minPath).toBeInstanceOf(Array);
|
|
322
|
+
|
|
323
|
+
const floydResult = myGraph.floyd();
|
|
324
|
+
expect(floydResult).toBeTruthy();
|
|
325
|
+
if (floydResult) {
|
|
326
|
+
const {costs, predecessor} = floydResult;
|
|
327
|
+
expect(costs).toBeInstanceOf(Array);
|
|
328
|
+
expect(costs.length).toBe(9);
|
|
329
|
+
expect(costs[0]).toEqual([32, 12, 35, 14, 70, Infinity, 61, Infinity, 19]);
|
|
330
|
+
expect(costs[1]).toEqual([20, 32, 23, 34, 58, Infinity, 81, Infinity, 39]);
|
|
331
|
+
expect(costs[2]).toEqual([3, 15, 38, 17, 35, Infinity, 64, Infinity, 22]);
|
|
332
|
+
expect(costs[3]).toEqual([123, 135, 120, 137, 155, Infinity, 47, Infinity, 126]);
|
|
333
|
+
expect(costs[4]).toEqual([133, 145, 130, 147, 165, Infinity, 57, Infinity, 136]);
|
|
334
|
+
expect(costs[5]).toEqual([Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity]);
|
|
335
|
+
expect(costs[6]).toEqual([76, 88, 73, 90, 108, Infinity, 137, Infinity, 79]);
|
|
336
|
+
expect(costs[7]).toEqual([Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity]);
|
|
337
|
+
expect(costs[8]).toEqual([173, 185, 170, 187, 205, Infinity, 97, Infinity, 176]);
|
|
338
|
+
|
|
339
|
+
expect(predecessor).toBeInstanceOf(Array);
|
|
340
|
+
expect(predecessor.length).toBe(9);
|
|
341
|
+
expect(predecessor[0]).toEqual([vertex2, null, vertex2, null, vertex3, null, vertex4, null, null]);
|
|
342
|
+
expect(predecessor[1]).toEqual([null, vertex1, null, vertex1, vertex3, null, vertex4, null, vertex1]);
|
|
343
|
+
expect(predecessor[5]).toEqual([null, null, null, null, null, null, null, null, null]);
|
|
344
|
+
expect(predecessor[7]).toEqual([null, null, null, null, null, null, null, null, null]);
|
|
345
|
+
expect(predecessor[8]).toEqual([vertex7, vertex7, vertex7, vertex7, vertex7, null, null, null, vertex7]);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
const dijkstraRes12tt = myGraph.dijkstra(1, 2, true, true);
|
|
349
|
+
expect(dijkstraRes12tt).toBeTruthy();
|
|
350
|
+
if (dijkstraRes12tt) {
|
|
351
|
+
const {distMap, minDist, minPath, paths, preMap, seen} = dijkstraRes12tt;
|
|
352
|
+
expect(distMap).toBeInstanceOf(Map);
|
|
353
|
+
expect(distMap.size).toBe(9);
|
|
354
|
+
expect(distMap.get(vertex1)).toBe(0);
|
|
355
|
+
expect(distMap.get(vertex2)).toBe(12);
|
|
356
|
+
expect(distMap.get(vertex3)).toBe(Infinity);
|
|
357
|
+
expect(distMap.get(vertex4)).toBe(14);
|
|
358
|
+
expect(distMap.get(vertex5)).toBe(Infinity);
|
|
359
|
+
expect(distMap.get(vertex6)).toBe(Infinity);
|
|
360
|
+
expect(distMap.get(vertex7)).toBe(Infinity);
|
|
361
|
+
expect(distMap.get(vertex8)).toBe(Infinity);
|
|
362
|
+
expect(distMap.get(vertex9)).toBe(19);
|
|
363
|
+
|
|
364
|
+
expect(minDist).toBe(12);
|
|
365
|
+
expect(minPath).toBeInstanceOf(Array);
|
|
366
|
+
expect(minPath.length).toBe(2);
|
|
367
|
+
expect(minPath[0]).toBe(vertex1);
|
|
368
|
+
expect(minPath[1]).toBe(vertex2);
|
|
369
|
+
|
|
370
|
+
expect(paths).toBeInstanceOf(Array);
|
|
371
|
+
expect(paths.length).toBe(9);
|
|
372
|
+
expect(paths[0]).toBeInstanceOf(Array);
|
|
373
|
+
expect(paths[0][0]).toBe(vertex1);
|
|
374
|
+
|
|
375
|
+
expect(paths[1]).toBeInstanceOf(Array);
|
|
376
|
+
expect(paths[1][0]).toBe(vertex1);
|
|
377
|
+
expect(paths[1][1]).toBe(vertex2);
|
|
378
|
+
|
|
379
|
+
expect(paths[2]).toBeInstanceOf(Array);
|
|
380
|
+
expect(paths[2][0]).toBe(vertex3);
|
|
381
|
+
expect(paths[3]).toBeInstanceOf(Array);
|
|
382
|
+
expect(paths[3][0]).toBe(vertex1);
|
|
383
|
+
expect(paths[3][1]).toBe(vertex4);
|
|
384
|
+
expect(paths[4]).toBeInstanceOf(Array);
|
|
385
|
+
expect(paths[4][0]).toBe(vertex5);
|
|
386
|
+
|
|
387
|
+
expect(paths[5]).toBeInstanceOf(Array);
|
|
388
|
+
expect(paths[5][0]).toBe(vertex6);
|
|
389
|
+
expect(paths[6]).toBeInstanceOf(Array);
|
|
390
|
+
expect(paths[6][0]).toBe(vertex7);
|
|
391
|
+
expect(paths[7]).toBeInstanceOf(Array);
|
|
392
|
+
expect(paths[7][0]).toBe(vertex8);
|
|
393
|
+
expect(paths[8]).toBeInstanceOf(Array);
|
|
394
|
+
expect(paths[8][0]).toBe(vertex1);
|
|
395
|
+
expect(paths[8][1]).toBe(vertex9);
|
|
396
|
+
}
|
|
397
|
+
});
|
|
398
|
+
});
|
|
399
|
+
```
|
|
31
400
|
|
|
32
401
|
## API docs
|
|
33
402
|
|
|
@@ -99,6 +468,7 @@ Hash, Coordinate Set, Coordinate Map, Heap, Priority Queue, Max Priority Queue,
|
|
|
99
468
|
|
|
100
469
|
<a href="https://github.com/zrwusa/data-structure-typed-examples" target="_blank">Examples Repository</a>
|
|
101
470
|
|
|
471
|
+
# Why
|
|
102
472
|
|
|
103
473
|
## Complexities
|
|
104
474
|
|
|
@@ -363,40 +733,41 @@ Hash, Coordinate Set, Coordinate Map, Heap, Priority Queue, Max Priority Queue,
|
|
|
363
733
|
</tbody>
|
|
364
734
|
</table>
|
|
365
735
|
|
|
736
|
+

|
|
366
737
|
|
|
367
|
-

|
|
368
739
|
|
|
369
|
-

|
|
370
741
|
|
|
371
|
-

|
|
372
743
|
|
|
373
|
-

|
|
374
745
|
|
|
375
|
-

|
|
376
747
|
|
|
377
|
-

|
|
378
749
|
|
|
379
|
-

|
|
380
751
|
|
|
381
|
-

|
|
382
753
|
|
|
383
|
-

|
|
384
755
|
|
|
385
|
-

|
|
386
757
|
|
|
387
|
-

|
|
388
759
|
|
|
389
|
-

|
|
390
761
|
|
|
391
|
-

|
|
392
763
|
|
|
393
|
-

|
|
394
765
|
|
|
395
|
-
[//]: # ()
|
|
396
767
|
|
|
397
|
-
[//]: # ()
|
|
398
769
|
|
|
399
|
-
[//]: # ()
|
|
400
771
|
|
|
401
772
|
|
|
402
773
|
|
|
@@ -22,63 +22,63 @@ export declare enum LoopType {
|
|
|
22
22
|
recursive = 2
|
|
23
23
|
}
|
|
24
24
|
export declare class BinaryTreeNode<T> {
|
|
25
|
+
constructor(id: BinaryTreeNodeId, val: T, count?: number);
|
|
25
26
|
protected _id: BinaryTreeNodeId;
|
|
26
27
|
get id(): BinaryTreeNodeId;
|
|
28
|
+
set id(v: BinaryTreeNodeId);
|
|
29
|
+
protected _val: T;
|
|
30
|
+
get val(): T;
|
|
31
|
+
set val(v: T);
|
|
32
|
+
protected _left?: BinaryTreeNode<T> | null;
|
|
33
|
+
get left(): BinaryTreeNode<T> | null | undefined;
|
|
34
|
+
set left(v: BinaryTreeNode<T> | null | undefined);
|
|
35
|
+
protected _right?: BinaryTreeNode<T> | null;
|
|
36
|
+
get right(): BinaryTreeNode<T> | null | undefined;
|
|
37
|
+
set right(v: BinaryTreeNode<T> | null | undefined);
|
|
38
|
+
protected _parent: BinaryTreeNode<T> | null | undefined;
|
|
39
|
+
get parent(): BinaryTreeNode<T> | null | undefined;
|
|
40
|
+
set parent(v: BinaryTreeNode<T> | null | undefined);
|
|
41
|
+
protected _familyPosition: FamilyPosition;
|
|
42
|
+
get familyPosition(): FamilyPosition;
|
|
43
|
+
set familyPosition(v: FamilyPosition);
|
|
44
|
+
protected _count: number;
|
|
45
|
+
get count(): number;
|
|
46
|
+
set count(v: number);
|
|
47
|
+
protected _height: number;
|
|
48
|
+
get height(): number;
|
|
49
|
+
set height(v: number);
|
|
27
50
|
/**
|
|
28
51
|
* Starting from TypeScript version 5.0 and onwards, the use of distinct access modifiers for Getters and Setters is not permitted. As an alternative, to ensure compatibility, it is necessary to adopt a Java-style approach for Setters (using the same name as the property) while utilizing separate method names for Getters.
|
|
29
52
|
*/
|
|
30
53
|
getId(): BinaryTreeNodeId;
|
|
31
|
-
set id(v: BinaryTreeNodeId);
|
|
32
|
-
protected _val: T;
|
|
33
|
-
get val(): T;
|
|
34
54
|
/**
|
|
35
55
|
* Starting from TypeScript version 5.0 and onwards, the use of distinct access modifiers for Getters and Setters is not permitted. As an alternative, to ensure compatibility, it is necessary to adopt a Java-style approach for Setters (using the same name as the property) while utilizing separate method names for Getters.
|
|
36
56
|
*/
|
|
37
57
|
getVal(): T;
|
|
38
|
-
set val(v: T);
|
|
39
|
-
protected _left?: BinaryTreeNode<T> | null;
|
|
40
|
-
get left(): BinaryTreeNode<T> | null | undefined;
|
|
41
58
|
/**
|
|
42
59
|
* Starting from TypeScript version 5.0 and onwards, the use of distinct access modifiers for Getters and Setters is not permitted. As an alternative, to ensure compatibility, it is necessary to adopt a Java-style approach for Setters (using the same name as the property) while utilizing separate method names for Getters.
|
|
43
60
|
*/
|
|
44
61
|
getLeft(): BinaryTreeNode<T> | null | undefined;
|
|
45
|
-
set left(v: BinaryTreeNode<T> | null | undefined);
|
|
46
|
-
protected _right?: BinaryTreeNode<T> | null;
|
|
47
|
-
get right(): BinaryTreeNode<T> | null | undefined;
|
|
48
62
|
/**
|
|
49
63
|
* Starting from TypeScript version 5.0 and onwards, the use of distinct access modifiers for Getters and Setters is not permitted. As an alternative, to ensure compatibility, it is necessary to adopt a Java-style approach for Setters (using the same name as the property) while utilizing separate method names for Getters.
|
|
50
64
|
*/
|
|
51
65
|
getRight(): BinaryTreeNode<T> | null | undefined;
|
|
52
|
-
set right(v: BinaryTreeNode<T> | null | undefined);
|
|
53
|
-
protected _parent: BinaryTreeNode<T> | null | undefined;
|
|
54
|
-
get parent(): BinaryTreeNode<T> | null | undefined;
|
|
55
66
|
/**
|
|
56
67
|
* Starting from TypeScript version 5.0 and onwards, the use of distinct access modifiers for Getters and Setters is not permitted. As an alternative, to ensure compatibility, it is necessary to adopt a Java-style approach for Setters (using the same name as the property) while utilizing separate method names for Getters.
|
|
57
68
|
*/
|
|
58
69
|
getParent(): BinaryTreeNode<T> | null | undefined;
|
|
59
|
-
set parent(v: BinaryTreeNode<T> | null | undefined);
|
|
60
|
-
protected _familyPosition: FamilyPosition;
|
|
61
|
-
get familyPosition(): FamilyPosition;
|
|
62
70
|
/**
|
|
63
71
|
* Starting from TypeScript version 5.0 and onwards, the use of distinct access modifiers for Getters and Setters is not permitted. As an alternative, to ensure compatibility, it is necessary to adopt a Java-style approach for Setters (using the same name as the property) while utilizing separate method names for Getters.
|
|
64
72
|
*/
|
|
65
73
|
getFamilyPosition(): FamilyPosition;
|
|
66
|
-
set familyPosition(v: FamilyPosition);
|
|
67
|
-
protected _count: number;
|
|
68
|
-
get count(): number;
|
|
69
74
|
/**
|
|
70
75
|
* Starting from TypeScript version 5.0 and onwards, the use of distinct access modifiers for Getters and Setters is not permitted. As an alternative, to ensure compatibility, it is necessary to adopt a Java-style approach for Setters (using the same name as the property) while utilizing separate method names for Getters.
|
|
71
76
|
*/
|
|
72
77
|
getCount(): number;
|
|
73
|
-
set count(v: number);
|
|
74
|
-
protected _height: number;
|
|
75
|
-
get height(): number;
|
|
76
78
|
/**
|
|
77
79
|
* Starting from TypeScript version 5.0 and onwards, the use of distinct access modifiers for Getters and Setters is not permitted. As an alternative, to ensure compatibility, it is necessary to adopt a Java-style approach for Setters (using the same name as the property) while utilizing separate method names for Getters.
|
|
78
80
|
*/
|
|
79
81
|
getHeight(): number;
|
|
80
|
-
set height(v: number);
|
|
81
|
-
constructor(id: BinaryTreeNodeId, val: T, count?: number);
|
|
82
82
|
swapLocation(swapNode: BinaryTreeNode<T>): BinaryTreeNode<T>;
|
|
83
83
|
clone(): BinaryTreeNode<T>;
|
|
84
84
|
}
|
|
@@ -104,26 +104,26 @@ export declare class BinaryTree<T> {
|
|
|
104
104
|
});
|
|
105
105
|
protected _root: BinaryTreeNode<T> | null;
|
|
106
106
|
get root(): BinaryTreeNode<T> | null;
|
|
107
|
+
protected set root(v: BinaryTreeNode<T> | null);
|
|
108
|
+
protected _size: number;
|
|
109
|
+
get size(): number;
|
|
110
|
+
protected set size(v: number);
|
|
111
|
+
protected _count: number;
|
|
112
|
+
get count(): number;
|
|
113
|
+
protected set count(v: number);
|
|
107
114
|
/**
|
|
108
115
|
* Starting from TypeScript version 5.0 and onwards, the use of distinct access modifiers for Getters and Setters is not permitted. As an alternative, to ensure compatibility, it is necessary to adopt a Java-style approach for Getters (using the same name as the property) while utilizing separate method names for Setters.
|
|
109
116
|
* @returns The method is returning either a BinaryTreeNode object of type T or null.
|
|
110
117
|
*/
|
|
111
118
|
getRoot(): BinaryTreeNode<T> | null;
|
|
112
|
-
protected set root(v: BinaryTreeNode<T> | null);
|
|
113
|
-
protected _size: number;
|
|
114
|
-
get size(): number;
|
|
115
119
|
/**
|
|
116
120
|
* Starting from TypeScript version 5.0 and onwards, the use of distinct access modifiers for Getters and Setters is not permitted. As an alternative, to ensure compatibility, it is necessary to adopt a Java-style approach for Setters (using the same name as the property) while utilizing separate method names for Getters.
|
|
117
121
|
*/
|
|
118
122
|
getSize(): number;
|
|
119
|
-
protected set size(v: number);
|
|
120
|
-
protected _count: number;
|
|
121
|
-
get count(): number;
|
|
122
123
|
/**
|
|
123
124
|
* Starting from TypeScript version 5.0 and onwards, the use of distinct access modifiers for Getters and Setters is not permitted. As an alternative, to ensure compatibility, it is necessary to adopt a Java-style approach for Setters (using the same name as the property) while utilizing separate method names for Getters.
|
|
124
125
|
*/
|
|
125
126
|
getCount(): number;
|
|
126
|
-
protected set count(v: number);
|
|
127
127
|
/**
|
|
128
128
|
* The function creates a new binary tree node with the given id, value, and count, or returns null if the value is
|
|
129
129
|
* null.
|