data-structure-typed 1.18.7 → 1.18.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (260) hide show
  1. package/README.md +154 -366
  2. package/dist/data-structures/binary-tree/abstract-binary-tree.d.ts +29 -32
  3. package/dist/data-structures/binary-tree/abstract-binary-tree.js +179 -136
  4. package/dist/data-structures/binary-tree/avl-tree.d.ts +4 -4
  5. package/dist/data-structures/binary-tree/avl-tree.js +2 -2
  6. package/dist/data-structures/binary-tree/binary-tree.d.ts +3 -3
  7. package/dist/data-structures/binary-tree/binary-tree.js +4 -4
  8. package/dist/data-structures/binary-tree/bst.d.ts +13 -25
  9. package/dist/data-structures/binary-tree/bst.js +20 -74
  10. package/dist/data-structures/binary-tree/rb-tree.d.ts +6 -6
  11. package/dist/data-structures/binary-tree/tree-multiset.d.ts +6 -6
  12. package/dist/data-structures/binary-tree/tree-multiset.js +7 -14
  13. package/dist/data-structures/graph/abstract-graph.d.ts +11 -9
  14. package/dist/data-structures/graph/abstract-graph.js +39 -22
  15. package/dist/data-structures/graph/directed-graph.d.ts +17 -15
  16. package/dist/data-structures/graph/directed-graph.js +47 -42
  17. package/dist/data-structures/graph/undirected-graph.d.ts +7 -7
  18. package/dist/data-structures/graph/undirected-graph.js +48 -48
  19. package/dist/data-structures/interfaces/abstract-binary-tree.d.ts +2 -3
  20. package/dist/data-structures/interfaces/abstract-graph.d.ts +2 -4
  21. package/dist/data-structures/interfaces/avl-tree.d.ts +1 -1
  22. package/dist/data-structures/interfaces/bst.d.ts +2 -2
  23. package/dist/data-structures/interfaces/rb-tree.d.ts +2 -2
  24. package/dist/data-structures/interfaces/tree-multiset.d.ts +7 -1
  25. package/dist/data-structures/tree/tree.d.ts +1 -4
  26. package/dist/data-structures/tree/tree.js +1 -12
  27. package/dist/data-structures/types/abstract-binary-tree.d.ts +9 -5
  28. package/dist/data-structures/types/abstract-binary-tree.js +9 -5
  29. package/dist/data-structures/types/avl-tree.d.ts +1 -1
  30. package/dist/data-structures/types/binary-tree.d.ts +1 -1
  31. package/dist/data-structures/types/bst.d.ts +1 -1
  32. package/dist/data-structures/types/bst.js +1 -1
  33. package/dist/data-structures/types/directed-graph.js +1 -1
  34. package/dist/data-structures/types/helpers.d.ts +1 -8
  35. package/dist/data-structures/types/rb-tree.d.ts +2 -0
  36. package/dist/data-structures/types/rb-tree.js +1 -1
  37. package/dist/data-structures/types/tree-multiset.d.ts +4 -4
  38. package/dist/utils/types/utils.d.ts +18 -0
  39. package/dist/utils/utils.d.ts +6 -1
  40. package/dist/utils/utils.js +21 -1
  41. package/package.json +2 -2
  42. package/backup/recursive-type/src/assets/complexities-diff.jpg +0 -0
  43. package/backup/recursive-type/src/assets/data-structure-complexities.jpg +0 -0
  44. package/backup/recursive-type/src/assets/logo.png +0 -0
  45. package/backup/recursive-type/src/assets/overview-diagram-of-data-structures.png +0 -0
  46. package/backup/recursive-type/src/data-structures/binary-tree/aa-tree.ts +0 -3
  47. package/backup/recursive-type/src/data-structures/binary-tree/avl-tree.ts +0 -288
  48. package/backup/recursive-type/src/data-structures/binary-tree/b-tree.ts +0 -3
  49. package/backup/recursive-type/src/data-structures/binary-tree/binary-indexed-tree.ts +0 -78
  50. package/backup/recursive-type/src/data-structures/binary-tree/binary-tree.ts +0 -1502
  51. package/backup/recursive-type/src/data-structures/binary-tree/bst.ts +0 -503
  52. package/backup/recursive-type/src/data-structures/binary-tree/diagrams/avl-tree-inserting.gif +0 -0
  53. package/backup/recursive-type/src/data-structures/binary-tree/diagrams/bst-rotation.gif +0 -0
  54. package/backup/recursive-type/src/data-structures/binary-tree/diagrams/segment-tree.png +0 -0
  55. package/backup/recursive-type/src/data-structures/binary-tree/index.ts +0 -11
  56. package/backup/recursive-type/src/data-structures/binary-tree/rb-tree.ts +0 -110
  57. package/backup/recursive-type/src/data-structures/binary-tree/segment-tree.ts +0 -243
  58. package/backup/recursive-type/src/data-structures/binary-tree/splay-tree.ts +0 -3
  59. package/backup/recursive-type/src/data-structures/binary-tree/tree-multiset.ts +0 -55
  60. package/backup/recursive-type/src/data-structures/binary-tree/two-three-tree.ts +0 -3
  61. package/backup/recursive-type/src/data-structures/diagrams/README.md +0 -5
  62. package/backup/recursive-type/src/data-structures/graph/abstract-graph.ts +0 -985
  63. package/backup/recursive-type/src/data-structures/graph/diagrams/adjacency-list-pros-cons.jpg +0 -0
  64. package/backup/recursive-type/src/data-structures/graph/diagrams/adjacency-list.jpg +0 -0
  65. package/backup/recursive-type/src/data-structures/graph/diagrams/adjacency-matrix-pros-cons.jpg +0 -0
  66. package/backup/recursive-type/src/data-structures/graph/diagrams/adjacency-matrix.jpg +0 -0
  67. package/backup/recursive-type/src/data-structures/graph/diagrams/dfs-can-do.jpg +0 -0
  68. package/backup/recursive-type/src/data-structures/graph/diagrams/edge-list-pros-cons.jpg +0 -0
  69. package/backup/recursive-type/src/data-structures/graph/diagrams/edge-list.jpg +0 -0
  70. package/backup/recursive-type/src/data-structures/graph/diagrams/max-flow.jpg +0 -0
  71. package/backup/recursive-type/src/data-structures/graph/diagrams/mst.jpg +0 -0
  72. package/backup/recursive-type/src/data-structures/graph/diagrams/tarjan-articulation-point-bridge.png +0 -0
  73. package/backup/recursive-type/src/data-structures/graph/diagrams/tarjan-complicate-simple.png +0 -0
  74. package/backup/recursive-type/src/data-structures/graph/diagrams/tarjan-strongly-connected-component.png +0 -0
  75. package/backup/recursive-type/src/data-structures/graph/diagrams/tarjan.mp4 +0 -0
  76. package/backup/recursive-type/src/data-structures/graph/diagrams/tarjan.webp +0 -0
  77. package/backup/recursive-type/src/data-structures/graph/directed-graph.ts +0 -478
  78. package/backup/recursive-type/src/data-structures/graph/index.ts +0 -3
  79. package/backup/recursive-type/src/data-structures/graph/undirected-graph.ts +0 -293
  80. package/backup/recursive-type/src/data-structures/hash/coordinate-map.ts +0 -67
  81. package/backup/recursive-type/src/data-structures/hash/coordinate-set.ts +0 -56
  82. package/backup/recursive-type/src/data-structures/hash/hash-table.ts +0 -3
  83. package/backup/recursive-type/src/data-structures/hash/index.ts +0 -6
  84. package/backup/recursive-type/src/data-structures/hash/pair.ts +0 -3
  85. package/backup/recursive-type/src/data-structures/hash/tree-map.ts +0 -3
  86. package/backup/recursive-type/src/data-structures/hash/tree-set.ts +0 -3
  87. package/backup/recursive-type/src/data-structures/heap/heap.ts +0 -176
  88. package/backup/recursive-type/src/data-structures/heap/index.ts +0 -3
  89. package/backup/recursive-type/src/data-structures/heap/max-heap.ts +0 -31
  90. package/backup/recursive-type/src/data-structures/heap/min-heap.ts +0 -34
  91. package/backup/recursive-type/src/data-structures/index.ts +0 -15
  92. package/backup/recursive-type/src/data-structures/interfaces/abstract-graph.ts +0 -42
  93. package/backup/recursive-type/src/data-structures/interfaces/avl-tree.ts +0 -1
  94. package/backup/recursive-type/src/data-structures/interfaces/binary-tree.ts +0 -56
  95. package/backup/recursive-type/src/data-structures/interfaces/bst.ts +0 -1
  96. package/backup/recursive-type/src/data-structures/interfaces/directed-graph.ts +0 -15
  97. package/backup/recursive-type/src/data-structures/interfaces/doubly-linked-list.ts +0 -1
  98. package/backup/recursive-type/src/data-structures/interfaces/heap.ts +0 -1
  99. package/backup/recursive-type/src/data-structures/interfaces/index.ts +0 -13
  100. package/backup/recursive-type/src/data-structures/interfaces/navigator.ts +0 -1
  101. package/backup/recursive-type/src/data-structures/interfaces/priority-queue.ts +0 -1
  102. package/backup/recursive-type/src/data-structures/interfaces/segment-tree.ts +0 -1
  103. package/backup/recursive-type/src/data-structures/interfaces/singly-linked-list.ts +0 -1
  104. package/backup/recursive-type/src/data-structures/interfaces/tree-multiset.ts +0 -1
  105. package/backup/recursive-type/src/data-structures/interfaces/undirected-graph.ts +0 -3
  106. package/backup/recursive-type/src/data-structures/linked-list/doubly-linked-list.ts +0 -573
  107. package/backup/recursive-type/src/data-structures/linked-list/index.ts +0 -3
  108. package/backup/recursive-type/src/data-structures/linked-list/singly-linked-list.ts +0 -490
  109. package/backup/recursive-type/src/data-structures/linked-list/skip-linked-list.ts +0 -3
  110. package/backup/recursive-type/src/data-structures/matrix/index.ts +0 -4
  111. package/backup/recursive-type/src/data-structures/matrix/matrix.ts +0 -27
  112. package/backup/recursive-type/src/data-structures/matrix/matrix2d.ts +0 -208
  113. package/backup/recursive-type/src/data-structures/matrix/navigator.ts +0 -122
  114. package/backup/recursive-type/src/data-structures/matrix/vector2d.ts +0 -316
  115. package/backup/recursive-type/src/data-structures/priority-queue/index.ts +0 -3
  116. package/backup/recursive-type/src/data-structures/priority-queue/max-priority-queue.ts +0 -49
  117. package/backup/recursive-type/src/data-structures/priority-queue/min-priority-queue.ts +0 -50
  118. package/backup/recursive-type/src/data-structures/priority-queue/priority-queue.ts +0 -354
  119. package/backup/recursive-type/src/data-structures/queue/deque.ts +0 -251
  120. package/backup/recursive-type/src/data-structures/queue/index.ts +0 -2
  121. package/backup/recursive-type/src/data-structures/queue/queue.ts +0 -120
  122. package/backup/recursive-type/src/data-structures/stack/index.ts +0 -1
  123. package/backup/recursive-type/src/data-structures/stack/stack.ts +0 -98
  124. package/backup/recursive-type/src/data-structures/tree/index.ts +0 -1
  125. package/backup/recursive-type/src/data-structures/tree/tree.ts +0 -80
  126. package/backup/recursive-type/src/data-structures/trie/index.ts +0 -1
  127. package/backup/recursive-type/src/data-structures/trie/trie.ts +0 -227
  128. package/backup/recursive-type/src/data-structures/types/abstract-graph.ts +0 -5
  129. package/backup/recursive-type/src/data-structures/types/avl-tree.ts +0 -8
  130. package/backup/recursive-type/src/data-structures/types/binary-tree.ts +0 -10
  131. package/backup/recursive-type/src/data-structures/types/bst.ts +0 -6
  132. package/backup/recursive-type/src/data-structures/types/directed-graph.ts +0 -8
  133. package/backup/recursive-type/src/data-structures/types/doubly-linked-list.ts +0 -1
  134. package/backup/recursive-type/src/data-structures/types/heap.ts +0 -5
  135. package/backup/recursive-type/src/data-structures/types/index.ts +0 -12
  136. package/backup/recursive-type/src/data-structures/types/navigator.ts +0 -13
  137. package/backup/recursive-type/src/data-structures/types/priority-queue.ts +0 -9
  138. package/backup/recursive-type/src/data-structures/types/segment-tree.ts +0 -1
  139. package/backup/recursive-type/src/data-structures/types/singly-linked-list.ts +0 -1
  140. package/backup/recursive-type/src/data-structures/types/tree-multiset.ts +0 -1
  141. package/backup/recursive-type/src/index.ts +0 -1
  142. package/backup/recursive-type/src/utils/index.ts +0 -2
  143. package/backup/recursive-type/src/utils/types/index.ts +0 -1
  144. package/backup/recursive-type/src/utils/types/utils.ts +0 -6
  145. package/backup/recursive-type/src/utils/utils.ts +0 -78
  146. package/docs/.nojekyll +0 -1
  147. package/docs/assets/highlight.css +0 -92
  148. package/docs/assets/main.js +0 -58
  149. package/docs/assets/search.js +0 -1
  150. package/docs/assets/style.css +0 -1367
  151. package/docs/classes/AVLTree.html +0 -2451
  152. package/docs/classes/AVLTreeNode.html +0 -499
  153. package/docs/classes/AaTree.html +0 -172
  154. package/docs/classes/AbstractBinaryTree.html +0 -2118
  155. package/docs/classes/AbstractBinaryTreeNode.html +0 -524
  156. package/docs/classes/AbstractEdge.html +0 -295
  157. package/docs/classes/AbstractGraph.html +0 -1043
  158. package/docs/classes/AbstractVertex.html +0 -258
  159. package/docs/classes/ArrayDeque.html +0 -439
  160. package/docs/classes/BST.html +0 -2297
  161. package/docs/classes/BSTNode.html +0 -503
  162. package/docs/classes/BTree.html +0 -172
  163. package/docs/classes/BinaryIndexedTree.html +0 -341
  164. package/docs/classes/BinaryTree.html +0 -2133
  165. package/docs/classes/BinaryTreeNode.html +0 -501
  166. package/docs/classes/Character.html +0 -220
  167. package/docs/classes/CoordinateMap.html +0 -483
  168. package/docs/classes/CoordinateSet.html +0 -444
  169. package/docs/classes/Deque.html +0 -975
  170. package/docs/classes/DirectedEdge.html +0 -366
  171. package/docs/classes/DirectedGraph.html +0 -1443
  172. package/docs/classes/DirectedVertex.html +0 -254
  173. package/docs/classes/DoublyLinkedList.html +0 -968
  174. package/docs/classes/DoublyLinkedListNode.html +0 -297
  175. package/docs/classes/HashTable.html +0 -172
  176. package/docs/classes/Heap.html +0 -423
  177. package/docs/classes/HeapItem.html +0 -255
  178. package/docs/classes/Matrix2D.html +0 -502
  179. package/docs/classes/MatrixNTI2D.html +0 -240
  180. package/docs/classes/MaxHeap.html +0 -436
  181. package/docs/classes/MaxPriorityQueue.html +0 -836
  182. package/docs/classes/MinHeap.html +0 -437
  183. package/docs/classes/MinPriorityQueue.html +0 -838
  184. package/docs/classes/Navigator.html +0 -313
  185. package/docs/classes/ObjectDeque.html +0 -455
  186. package/docs/classes/Pair.html +0 -172
  187. package/docs/classes/PriorityQueue.html +0 -760
  188. package/docs/classes/Queue.html +0 -392
  189. package/docs/classes/RBTree.html +0 -2388
  190. package/docs/classes/RBTreeNode.html +0 -516
  191. package/docs/classes/SegmentTree.html +0 -434
  192. package/docs/classes/SegmentTreeNode.html +0 -357
  193. package/docs/classes/SinglyLinkedList.html +0 -788
  194. package/docs/classes/SinglyLinkedListNode.html +0 -270
  195. package/docs/classes/SkipLinkedList.html +0 -172
  196. package/docs/classes/SplayTree.html +0 -172
  197. package/docs/classes/Stack.html +0 -368
  198. package/docs/classes/TreeMap.html +0 -172
  199. package/docs/classes/TreeMultiSet.html +0 -2297
  200. package/docs/classes/TreeMultiSetNode.html +0 -499
  201. package/docs/classes/TreeNode.html +0 -343
  202. package/docs/classes/TreeSet.html +0 -172
  203. package/docs/classes/Trie.html +0 -372
  204. package/docs/classes/TrieNode.html +0 -280
  205. package/docs/classes/TwoThreeTree.html +0 -172
  206. package/docs/classes/UndirectedEdge.html +0 -337
  207. package/docs/classes/UndirectedGraph.html +0 -1210
  208. package/docs/classes/UndirectedVertex.html +0 -254
  209. package/docs/classes/Vector2D.html +0 -805
  210. package/docs/enums/CP.html +0 -181
  211. package/docs/enums/FamilyPosition.html +0 -181
  212. package/docs/enums/LoopType.html +0 -182
  213. package/docs/enums/RBColor.html +0 -174
  214. package/docs/enums/TopologicalProperty.html +0 -181
  215. package/docs/index.html +0 -645
  216. package/docs/interfaces/IAVLTree.html +0 -1378
  217. package/docs/interfaces/IAVLTreeNode.html +0 -405
  218. package/docs/interfaces/IAbstractBinaryTree.html +0 -1124
  219. package/docs/interfaces/IAbstractBinaryTreeNode.html +0 -384
  220. package/docs/interfaces/IAbstractGraph.html +0 -433
  221. package/docs/interfaces/IBST.html +0 -1271
  222. package/docs/interfaces/IBSTNode.html +0 -408
  223. package/docs/interfaces/IDirectedGraph.html +0 -572
  224. package/docs/interfaces/IUNDirectedGraph.html +0 -465
  225. package/docs/modules.html +0 -262
  226. package/docs/types/AVLTreeOptions.html +0 -150
  227. package/docs/types/AbstractBinaryTreeNodeProperties.html +0 -152
  228. package/docs/types/AbstractBinaryTreeNodeProperty.html +0 -152
  229. package/docs/types/AbstractBinaryTreeOptions.html +0 -156
  230. package/docs/types/AbstractRecursiveBinaryTreeNode.html +0 -152
  231. package/docs/types/BSTComparator.html +0 -162
  232. package/docs/types/BSTOptions.html +0 -152
  233. package/docs/types/BinaryTreeDeletedResult.html +0 -159
  234. package/docs/types/BinaryTreeNodeId.html +0 -147
  235. package/docs/types/BinaryTreeNodePropertyName.html +0 -147
  236. package/docs/types/BinaryTreeOptions.html +0 -150
  237. package/docs/types/DFSOrderPattern.html +0 -147
  238. package/docs/types/DijkstraResult.html +0 -167
  239. package/docs/types/Direction.html +0 -147
  240. package/docs/types/EdgeId.html +0 -147
  241. package/docs/types/HeapOptions.html +0 -168
  242. package/docs/types/IdObject.html +0 -157
  243. package/docs/types/KeyValObject.html +0 -152
  244. package/docs/types/NavigatorParams.html +0 -181
  245. package/docs/types/NodeOrPropertyName.html +0 -147
  246. package/docs/types/PriorityQueueComparator.html +0 -167
  247. package/docs/types/PriorityQueueDFSOrderPattern.html +0 -147
  248. package/docs/types/PriorityQueueOptions.html +0 -161
  249. package/docs/types/RBTreeOptions.html +0 -150
  250. package/docs/types/RecursiveAVLTreeNode.html +0 -152
  251. package/docs/types/RecursiveBSTNode.html +0 -152
  252. package/docs/types/RecursiveBinaryTreeNode.html +0 -152
  253. package/docs/types/RecursiveTreeMultiSetNode.html +0 -152
  254. package/docs/types/SegmentTreeNodeVal.html +0 -147
  255. package/docs/types/TopologicalStatus.html +0 -147
  256. package/docs/types/TreeMultiSetOptions.html +0 -152
  257. package/docs/types/Turning.html +0 -147
  258. package/docs/types/VertexId.html +0 -147
  259. package/notes/bst.test.ts +0 -181
  260. package/notes/note.md +0 -34
package/README.md CHANGED
@@ -204,22 +204,6 @@ wide range of data structures
204
204
  DFS, DFSIterative, BFS, morris, Bellman-Ford Algorithm, Dijkstra's Algorithm, Floyd-Warshall Algorithm, Tarjan's Algorithm
205
205
 
206
206
  # How
207
-
208
- [API Docs](https://data-structure-typed-docs.vercel.app)
209
-
210
- [Live Examples](https://data-structure-typed-examples.vercel.app)
211
-
212
-
213
- ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/examples/dfs-pre-order.webp)
214
-
215
- ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/examples/test-graphs.webp)
216
-
217
- ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/examples/cut-off-trees-for-golf.webp)
218
-
219
- ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/examples/parenthesis-check.webp)
220
-
221
- <a href="https://data-structure-typed-examples.vercel.app" target="_blank">Live Examples</a>
222
-
223
207
  ## install
224
208
 
225
209
  ### yarn
@@ -236,366 +220,159 @@ npm install data-structure-typed
236
220
 
237
221
  ### Binary Search Tree (BST) snippet
238
222
 
223
+ #### TS
239
224
  ```typescript
240
225
  import {BST, BSTNode} from 'data-structure-typed';
241
226
 
242
- const tree = new BST();
243
- expect(tree).toBeInstanceOf(BST);
244
-
245
- const ids = [11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];
246
- tree.addMany(ids);
247
- expect(tree.root).toBeInstanceOf(BSTNode);
248
- if (tree.root) expect(tree.root.id).toBe(11);
249
- expect(tree.count).toBe(16);
250
- expect(tree.has(6)).toBe(true);
251
-
252
- const node6 = tree.get(6);
253
- expect(node6 && tree.getHeight(node6)).toBe(2);
254
- expect(node6 && tree.getDepth(node6)).toBe(3);
255
-
256
- const nodeId10 = tree.get(10, 'id');
257
- expect(nodeId10?.id).toBe(10);
258
-
259
- const nodeVal9 = tree.get(9, 'val');
260
- expect(nodeVal9?.id).toBe(9);
261
-
262
- const nodesByCount1 = tree.getNodes(1, 'count');
263
- expect(nodesByCount1.length).toBe(16);
264
-
265
- const leftMost = tree.getLeftMost();
227
+ const bst = new BST();
228
+ bst.add(11);
229
+ bst.add(3);
230
+ bst.addMany([15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5]);
231
+ bst.size === 16; // true
232
+ bst.has(6); // true
233
+ const node6 = bst.get(6);
234
+ bst.getHeight(6) === 2; // true
235
+ bst.getHeight() === 5; // true
236
+ bst.getDepth(6) === 3; // true
237
+ const leftMost = bst.getLeftMost();
238
+ leftMost?.id === 1; // true
266
239
  expect(leftMost?.id).toBe(1);
240
+ bst.remove(6);
241
+ bst.get(6); // null
242
+ bst.isAVLBalanced(); // true or false
243
+ const bfsIDs = bst.BFS();
244
+ bfsIDs[0] === 11; // true
245
+ expect(bfsIDs[0]).toBe(11);
246
+
247
+ const objBST = new BST<BSTNode<{ id: number, keyA: number }>>();
248
+ objBST.add(11, {id: 11, keyA: 11});
249
+ objBST.add(3, {id: 3, keyA: 3});
250
+
251
+ objBST.addMany([{id: 15, keyA: 15}, {id: 1, keyA: 1}, {id: 8, keyA: 8},
252
+ {id: 13, keyA: 13}, {id: 16, keyA: 16}, {id: 2, keyA: 2},
253
+ {id: 6, keyA: 6}, {id: 9, keyA: 9}, {id: 12, keyA: 12},
254
+ {id: 14, keyA: 14}, {id: 4, keyA: 4}, {id: 7, keyA: 7},
255
+ {id: 10, keyA: 10}, {id: 5, keyA: 5}]);
256
+
257
+ objBST.remove(11);
258
+
259
+
260
+ const avlTree = new AVLTree();
261
+ avlTree.addMany([11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5])
262
+ avlTree.isAVLBalanced(); // true
263
+ avlTree.remove(10);
264
+ avlTree.isAVLBalanced(); // true
267
265
 
268
- const node15 = tree.get(15);
269
- const minNodeBySpecificNode = node15 && tree.getLeftMost(node15);
270
- expect(minNodeBySpecificNode?.id).toBe(12);
271
-
272
- const subTreeSum = node15 && tree.subTreeSum(node15);
273
- expect(subTreeSum).toBe(70);
274
-
275
- const lesserSum = tree.lesserSum(10);
276
- expect(lesserSum).toBe(45);
277
-
278
- expect(node15).toBeInstanceOf(BSTNode);
279
- if (node15 instanceof BSTNode) {
280
- const subTreeAdd = tree.subTreeAdd(node15, 1, 'count');
281
- expect(subTreeAdd).toBeDefined();
282
- }
283
-
284
- const node11 = tree.get(11);
285
- expect(node11).toBeInstanceOf(BSTNode);
286
- if (node11 instanceof BSTNode) {
287
- const allGreaterNodesAdded = tree.allGreaterNodesAdd(node11, 2, 'count');
288
- expect(allGreaterNodesAdded).toBeDefined();
289
- }
290
-
291
- const dfsInorderNodes = tree.DFS('in', 'node');
292
- expect(dfsInorderNodes[0].id).toBe(1);
293
- expect(dfsInorderNodes[dfsInorderNodes.length - 1].id).toBe(16);
294
-
295
- tree.balance();
296
- expect(tree.isBalanced()).toBe(true);
297
-
298
- const bfsNodesAfterBalanced = tree.BFS('node');
299
- expect(bfsNodesAfterBalanced[0].id).toBe(8);
300
- expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].id).toBe(16);
301
-
302
- const removed11 = tree.remove(11, true);
303
- expect(removed11).toBeInstanceOf(Array);
304
- expect(removed11[0]).toBeDefined();
305
- expect(removed11[0].deleted).toBeDefined();
306
-
307
- if (removed11[0].deleted) expect(removed11[0].deleted.id).toBe(11);
308
-
309
- expect(tree.isAVLBalanced()).toBe(true);
310
-
311
- expect(node15 && tree.getHeight(node15)).toBe(2);
312
-
313
- const removed1 = tree.remove(1, true);
314
- expect(removed1).toBeInstanceOf(Array);
315
- expect(removed1[0]).toBeDefined();
316
- expect(removed1[0].deleted).toBeDefined();
317
- if (removed1[0].deleted) expect(removed1[0].deleted.id).toBe(1);
318
-
319
- expect(tree.isAVLBalanced()).toBe(true);
320
-
321
- expect(tree.getHeight()).toBe(4);
322
-
323
- // The code for removing these nodes (4, 10, 15, 5, 13, 3, 8, 6, 7, 9, 14) in sequence has been omitted.
324
-
325
- expect(tree.isAVLBalanced()).toBe(false);
326
-
327
- const bfsIDs = tree.BFS();
328
- expect(bfsIDs[0]).toBe(2);
329
- expect(bfsIDs[1]).toBe(12);
330
- expect(bfsIDs[2]).toBe(16);
266
+ ```
267
+ #### JS
268
+ ```javascript
269
+ const {BST, BSTNode} = require('data-structure-typed');
270
+
271
+ const bst = new BST();
272
+ bst.add(11);
273
+ bst.add(3);
274
+ bst.addMany([15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5]);
275
+ bst.size === 16; // true
276
+ bst.has(6); // true
277
+ const node6 = bst.get(6);
278
+ bst.getHeight(6) === 2; // true
279
+ bst.getHeight() === 5; // true
280
+ bst.getDepth(6) === 3; // true
281
+ const leftMost = bst.getLeftMost();
282
+ leftMost?.id === 1; // true
283
+ expect(leftMost?.id).toBe(1);
284
+ bst.remove(6);
285
+ bst.get(6); // null
286
+ bst.isAVLBalanced(); // true or false
287
+ const bfsIDs = bst.BFS();
288
+ bfsIDs[0] === 11; // true
289
+ expect(bfsIDs[0]).toBe(11);
290
+
291
+ const objBST = new BST();
292
+ objBST.add(11, {id: 11, keyA: 11});
293
+ objBST.add(3, {id: 3, keyA: 3});
294
+
295
+ objBST.addMany([{id: 15, keyA: 15}, {id: 1, keyA: 1}, {id: 8, keyA: 8},
296
+ {id: 13, keyA: 13}, {id: 16, keyA: 16}, {id: 2, keyA: 2},
297
+ {id: 6, keyA: 6}, {id: 9, keyA: 9}, {id: 12, keyA: 12},
298
+ {id: 14, keyA: 14}, {id: 4, keyA: 4}, {id: 7, keyA: 7},
299
+ {id: 10, keyA: 10}, {id: 5, keyA: 5}]);
300
+
301
+ objBST.remove(11);
302
+
303
+
304
+ const avlTree = new AVLTree();
305
+ avlTree.addMany([11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5])
306
+ avlTree.isAVLBalanced(); // true
307
+ avlTree.remove(10);
308
+ avlTree.isAVLBalanced(); // true
331
309
 
332
- const bfsNodes = tree.BFS('node');
333
- expect(bfsNodes[0].id).toBe(2);
334
- expect(bfsNodes[1].id).toBe(12);
335
- expect(bfsNodes[2].id).toBe(16);
336
310
  ```
337
311
 
338
312
  ### Directed Graph simple snippet
339
313
 
314
+ #### TS or JS
340
315
  ```typescript
341
- import {DirectedGraph, DirectedVertex, DirectedEdge, VertexId} from 'data-structure-typed';
342
-
343
- let graph: DirectedGraph<DirectedVertex, DirectedEdge>;
344
-
345
- beforeEach(() => {
346
- graph = new DirectedGraph();
347
- });
348
-
349
-
350
- it('should add vertices', () => {
351
- const vertex1 = new DirectedVertex('A');
352
- const vertex2 = new DirectedVertex('B');
353
-
354
- graph.addVertex(vertex1);
355
- graph.addVertex(vertex2);
356
-
357
- expect(graph.hasVertex(vertex1)).toBe(true);
358
- expect(graph.hasVertex(vertex2)).toBe(true);
359
- });
316
+ import {DirectedGraph} from 'data-structure-typed';
317
+
318
+ const graph = new DirectedGraph();
319
+
320
+ graph.addVertex('A');
321
+ graph.addVertex('B');
322
+
323
+ graph.hasVertex('A'); // true
324
+ graph.hasVertex('B'); // true
325
+ graph.hasVertex('C'); // false
326
+
327
+ graph.addEdge('A', 'B');
328
+ graph.hasEdge('A', 'B'); // true
329
+ graph.hasEdge('B', 'A'); // false
330
+
331
+ graph.removeEdgeSrcToDest('A', 'B');
332
+ graph.hasEdge('A', 'B'); // false
333
+
334
+ graph.addVertex('C');
335
+
336
+ graph.addEdge('A', 'B');
337
+ graph.addEdge('B', 'C');
338
+
339
+ const topologicalOrderIds = graph.topologicalSort(); // ['A', 'B', 'C']
340
+ ```
360
341
 
361
- it('should add edges', () => {
362
- const vertex1 = new DirectedVertex('A');
363
- const vertex2 = new DirectedVertex('B');
364
- const edge = new DirectedEdge('A', 'B');
342
+ ### Undirected Graph snippet
365
343
 
366
- graph.addVertex(vertex1);
367
- graph.addVertex(vertex2);
368
- graph.addEdge(edge);
344
+ #### TS or JS
345
+ ```typescript
346
+ import {UndirectedGraph} from 'data-structure-typed';
347
+
348
+ const graph = new UndirectedGraph();
349
+ graph.addVertex('A');
350
+ graph.addVertex('B');
351
+ graph.addVertex('C');
352
+ graph.addVertex('D');
353
+ graph.removeVertex('C');
354
+ graph.addEdge('A', 'B');
355
+ graph.addEdge('B', 'D');
356
+
357
+ const dijkstraResult = graph.dijkstra('A');
358
+ Array.from(dijkstraResult?.seen ?? []).map(vertex => vertex.id) // ['A', 'B', 'D']
359
+ ```
369
360
 
370
- expect(graph.hasEdge('A', 'B')).toBe(true);
371
- expect(graph.hasEdge('B', 'A')).toBe(false);
372
- });
361
+ [API Docs](https://data-structure-typed-docs.vercel.app)
373
362
 
374
- it('should remove edges', () => {
375
- const vertex1 = new DirectedVertex('A');
376
- const vertex2 = new DirectedVertex('B');
377
- const edge = new DirectedEdge('A', 'B');
363
+ [Live Examples](https://data-structure-typed-examples.vercel.app)
378
364
 
379
- graph.addVertex(vertex1);
380
- graph.addVertex(vertex2);
381
- graph.addEdge(edge);
382
365
 
383
- expect(graph.removeEdge(edge)).toBe(edge);
384
- expect(graph.hasEdge('A', 'B')).toBe(false);
385
- });
366
+ ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/examples/dfs-pre-order.webp)
386
367
 
387
- it('should perform topological sort', () => {
388
- const vertexA = new DirectedVertex('A');
389
- const vertexB = new DirectedVertex('B');
390
- const vertexC = new DirectedVertex('C');
391
- const edgeAB = new DirectedEdge('A', 'B');
392
- const edgeBC = new DirectedEdge('B', 'C');
368
+ ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/examples/test-graphs.webp)
393
369
 
394
- graph.addVertex(vertexA);
395
- graph.addVertex(vertexB);
396
- graph.addVertex(vertexC);
397
- graph.addEdge(edgeAB);
398
- graph.addEdge(edgeBC);
370
+ ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/examples/cut-off-trees-for-golf.webp)
399
371
 
400
- const topologicalOrder = graph.topologicalSort();
401
- if (topologicalOrder) expect(topologicalOrder.map(v => v.id)).toEqual(['A', 'B', 'C']);
402
- });
403
- ```
372
+ ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/examples/parenthesis-check.webp)
404
373
 
405
- ### Directed Graph complex snippet
374
+ <a href="https://data-structure-typed-examples.vercel.app" target="_blank">Live Examples</a>
406
375
 
407
- ```typescript
408
- import {DirectedGraph, DirectedVertex, DirectedEdge, VertexId} from 'data-structure-typed';
409
-
410
- class MyVertex extends DirectedVertex {
411
- private _data: string;
412
- get data(): string {
413
- return this._data;
414
- }
415
- set data(value: string) {
416
- this._data = value;
417
- }
418
-
419
- constructor(id: VertexId, data: string) {
420
- super(id);
421
- this._data = data;
422
- }
423
- }
424
-
425
- class MyEdge extends DirectedEdge {
426
- private _data: string;
427
- get data(): string {
428
- return this._data;
429
- }
430
- set data(value: string) {
431
- this._data = value;
432
- }
433
-
434
- constructor(v1: VertexId, v2: VertexId, weight: number, data: string) {
435
- super(v1, v2, weight);
436
- this._data = data;
437
- }
438
- }
439
-
440
- describe('DirectedGraph Test3', () => {
441
- const myGraph = new DirectedGraph<MyVertex, MyEdge>();
442
-
443
- it('should test graph operations', () => {
444
- const vertex1 = new MyVertex(1, 'data1');
445
- const vertex2 = new MyVertex(2, 'data2');
446
- const vertex3 = new MyVertex(3, 'data3');
447
- const vertex4 = new MyVertex(4, 'data4');
448
- const vertex5 = new MyVertex(5, 'data5');
449
- const vertex6 = new MyVertex(6, 'data6');
450
- const vertex7 = new MyVertex(7, 'data7');
451
- const vertex8 = new MyVertex(8, 'data8');
452
- const vertex9 = new MyVertex(9, 'data9');
453
- myGraph.addVertex(vertex1);
454
- myGraph.addVertex(vertex2);
455
- myGraph.addVertex(vertex3);
456
- myGraph.addVertex(vertex4);
457
- myGraph.addVertex(vertex5);
458
- myGraph.addVertex(vertex6);
459
- myGraph.addVertex(vertex7);
460
- myGraph.addVertex(vertex8);
461
- myGraph.addVertex(vertex9);
462
-
463
- myGraph.addEdge(new MyEdge(1, 2, 10, 'edge-data1-2'));
464
- myGraph.addEdge(new MyEdge(2, 1, 20, 'edge-data2-1'));
465
-
466
- expect(myGraph.getEdge(1, 2)).toBeTruthy();
467
- expect(myGraph.getEdge(2, 1)).toBeTruthy();
468
- expect(myGraph.getEdge(1, '100')).toBeFalsy();
469
-
470
- myGraph.removeEdgeBetween(1, 2);
471
- expect(myGraph.getEdge(1, 2)).toBeFalsy();
472
-
473
- myGraph.addEdge(new MyEdge(3, 1, 3, 'edge-data-3-1'));
474
- myGraph.addEdge(new MyEdge(1, 9, 19, 'edge-data1-9'));
475
- myGraph.addEdge(new MyEdge(9, 7, 97, 'edge-data9-7'));
476
- myGraph.addEdge(new MyEdge(7, 9, 79, 'edge-data7-9'));
477
- myGraph.addEdge(new MyEdge(1, 4, 14, 'edge-data1-4'));
478
- myGraph.addEdge(new MyEdge(4, 7, 47, 'edge-data4-7'));
479
- myGraph.addEdge(new MyEdge(1, 2, 12, 'edge-data1-2'));
480
- myGraph.addEdge(new MyEdge(2, 3, 23, 'edge-data2-3'));
481
- myGraph.addEdge(new MyEdge(3, 5, 35, 'edge-data3-5'));
482
- myGraph.addEdge(new MyEdge(5, 7, 57, 'edge-data5-7'));
483
- myGraph.addEdge(new MyEdge(7, 3, 73, 'edge-data7-3'));
484
-
485
- const topologicalSorted = myGraph.topologicalSort();
486
- expect(topologicalSorted).toBeNull();
487
-
488
- const minPath1to7 = myGraph.getMinPathBetween(1, 7);
489
- expect(minPath1to7).toBeInstanceOf(Array);
490
- if (minPath1to7 && minPath1to7.length > 0) {
491
- expect(minPath1to7).toHaveLength(3);
492
- expect(minPath1to7[0]).toBeInstanceOf(MyVertex);
493
- expect(minPath1to7[0].id).toBe(1);
494
- expect(minPath1to7[1].id).toBe(9);
495
- expect(minPath1to7[2].id).toBe(7);
496
- }
497
-
498
- const fordResult1 = myGraph.bellmanFord(1);
499
- expect(fordResult1).toBeTruthy();
500
- expect(fordResult1.hasNegativeCycle).toBeUndefined();
501
- const {distMap, preMap, paths, min, minPath} = fordResult1;
502
- expect(distMap).toBeInstanceOf(Map);
503
- expect(distMap.size).toBe(9);
504
- expect(distMap.get(vertex1)).toBe(0);
505
- expect(distMap.get(vertex2)).toBe(12);
506
- expect(distMap.get(vertex3)).toBe(35);
507
- expect(distMap.get(vertex4)).toBe(14);
508
- expect(distMap.get(vertex5)).toBe(70);
509
- expect(distMap.get(vertex6)).toBe(Infinity);
510
- expect(distMap.get(vertex7)).toBe(61);
511
- expect(distMap.get(vertex8)).toBe(Infinity);
512
- expect(distMap.get(vertex9)).toBe(19);
513
-
514
- expect(preMap).toBeInstanceOf(Map);
515
- expect(preMap.size).toBe(0);
516
-
517
- expect(paths).toBeInstanceOf(Array);
518
- expect(paths.length).toBe(0);
519
- expect(min).toBe(Infinity);
520
- expect(minPath).toBeInstanceOf(Array);
521
-
522
- const floydResult = myGraph.floyd();
523
- expect(floydResult).toBeTruthy();
524
- if (floydResult) {
525
- const {costs, predecessor} = floydResult;
526
- expect(costs).toBeInstanceOf(Array);
527
- expect(costs.length).toBe(9);
528
- expect(costs[0]).toEqual([32, 12, 35, 14, 70, Infinity, 61, Infinity, 19]);
529
- expect(costs[1]).toEqual([20, 32, 23, 34, 58, Infinity, 81, Infinity, 39]);
530
- expect(costs[2]).toEqual([3, 15, 38, 17, 35, Infinity, 64, Infinity, 22]);
531
- expect(costs[3]).toEqual([123, 135, 120, 137, 155, Infinity, 47, Infinity, 126]);
532
- expect(costs[4]).toEqual([133, 145, 130, 147, 165, Infinity, 57, Infinity, 136]);
533
- expect(costs[5]).toEqual([Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity]);
534
- expect(costs[6]).toEqual([76, 88, 73, 90, 108, Infinity, 137, Infinity, 79]);
535
- expect(costs[7]).toEqual([Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity]);
536
- expect(costs[8]).toEqual([173, 185, 170, 187, 205, Infinity, 97, Infinity, 176]);
537
-
538
- expect(predecessor).toBeInstanceOf(Array);
539
- expect(predecessor.length).toBe(9);
540
- expect(predecessor[0]).toEqual([vertex2, null, vertex2, null, vertex3, null, vertex4, null, null]);
541
- expect(predecessor[1]).toEqual([null, vertex1, null, vertex1, vertex3, null, vertex4, null, vertex1]);
542
- expect(predecessor[5]).toEqual([null, null, null, null, null, null, null, null, null]);
543
- expect(predecessor[7]).toEqual([null, null, null, null, null, null, null, null, null]);
544
- expect(predecessor[8]).toEqual([vertex7, vertex7, vertex7, vertex7, vertex7, null, null, null, vertex7]);
545
- }
546
-
547
- const dijkstraRes12tt = myGraph.dijkstra(1, 2, true, true);
548
- expect(dijkstraRes12tt).toBeTruthy();
549
- if (dijkstraRes12tt) {
550
- const {distMap, minDist, minPath, paths, preMap, seen} = dijkstraRes12tt;
551
- expect(distMap).toBeInstanceOf(Map);
552
- expect(distMap.size).toBe(9);
553
- expect(distMap.get(vertex1)).toBe(0);
554
- expect(distMap.get(vertex2)).toBe(12);
555
- expect(distMap.get(vertex3)).toBe(Infinity);
556
- expect(distMap.get(vertex4)).toBe(14);
557
- expect(distMap.get(vertex5)).toBe(Infinity);
558
- expect(distMap.get(vertex6)).toBe(Infinity);
559
- expect(distMap.get(vertex7)).toBe(Infinity);
560
- expect(distMap.get(vertex8)).toBe(Infinity);
561
- expect(distMap.get(vertex9)).toBe(19);
562
-
563
- expect(minDist).toBe(12);
564
- expect(minPath).toBeInstanceOf(Array);
565
- expect(minPath.length).toBe(2);
566
- expect(minPath[0]).toBe(vertex1);
567
- expect(minPath[1]).toBe(vertex2);
568
-
569
- expect(paths).toBeInstanceOf(Array);
570
- expect(paths.length).toBe(9);
571
- expect(paths[0]).toBeInstanceOf(Array);
572
- expect(paths[0][0]).toBe(vertex1);
573
-
574
- expect(paths[1]).toBeInstanceOf(Array);
575
- expect(paths[1][0]).toBe(vertex1);
576
- expect(paths[1][1]).toBe(vertex2);
577
-
578
- expect(paths[2]).toBeInstanceOf(Array);
579
- expect(paths[2][0]).toBe(vertex3);
580
- expect(paths[3]).toBeInstanceOf(Array);
581
- expect(paths[3][0]).toBe(vertex1);
582
- expect(paths[3][1]).toBe(vertex4);
583
- expect(paths[4]).toBeInstanceOf(Array);
584
- expect(paths[4][0]).toBe(vertex5);
585
-
586
- expect(paths[5]).toBeInstanceOf(Array);
587
- expect(paths[5][0]).toBe(vertex6);
588
- expect(paths[6]).toBeInstanceOf(Array);
589
- expect(paths[6][0]).toBe(vertex7);
590
- expect(paths[7]).toBeInstanceOf(Array);
591
- expect(paths[7][0]).toBe(vertex8);
592
- expect(paths[8]).toBeInstanceOf(Array);
593
- expect(paths[8][0]).toBe(vertex1);
594
- expect(paths[8][1]).toBe(vertex9);
595
- }
596
- });
597
- });
598
- ```
599
376
 
600
377
  ## API docs
601
378
 
@@ -875,29 +652,40 @@ describe('DirectedGraph Test3', () => {
875
652
 
876
653
  ![complexities of data structures](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/assets/data-structure-complexities.jpg)
877
654
 
878
- ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/binary-tree/bst-rotation.gif)
655
+ [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/binary-tree/bst-rotation.gif&#41;)
879
656
 
880
- ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/binary-tree/avl-tree-inserting.gif)
657
+ [//]: # ()
658
+ [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/binary-tree/avl-tree-inserting.gif&#41;)
881
659
 
882
- ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/tarjan.webp)
660
+ [//]: # ()
661
+ [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/tarjan.webp&#41;)
883
662
 
884
- ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/adjacency-list.jpg)
663
+ [//]: # ()
664
+ [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/adjacency-list.jpg&#41;)
885
665
 
886
- ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/adjacency-list-pros-cons.jpg)
666
+ [//]: # ()
667
+ [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/adjacency-list-pros-cons.jpg&#41;)
887
668
 
888
- ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/adjacency-matrix.jpg)
669
+ [//]: # ()
670
+ [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/adjacency-matrix.jpg&#41;)
889
671
 
890
- ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/adjacency-matrix-pros-cons.jpg)
672
+ [//]: # ()
673
+ [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/adjacency-matrix-pros-cons.jpg&#41;)
891
674
 
892
- ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/dfs-can-do.jpg)
675
+ [//]: # ()
676
+ [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/dfs-can-do.jpg&#41;)
893
677
 
894
- ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/edge-list.jpg)
678
+ [//]: # ()
679
+ [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/edge-list.jpg&#41;)
895
680
 
896
- ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/edge-list-pros-cons.jpg)
681
+ [//]: # ()
682
+ [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/edge-list-pros-cons.jpg&#41;)
897
683
 
898
- ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/max-flow.jpg)
684
+ [//]: # ()
685
+ [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/max-flow.jpg&#41;)
899
686
 
900
- ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/mst.jpg)
687
+ [//]: # ()
688
+ [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/mst.jpg&#41;)
901
689
 
902
690
  [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/tarjan-articulation-point-bridge.png&#41;)
903
691