data-structure-typed 2.5.0 → 2.5.2

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 (246) hide show
  1. package/.vitepress/cache/deps_temp_51f5f1b0/chunk-7OIKW5WK.js +12984 -0
  2. package/.vitepress/cache/deps_temp_51f5f1b0/package.json +3 -0
  3. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vue_devtools-api.js +4505 -0
  4. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vueuse_core.js +9731 -0
  5. package/.vitepress/cache/deps_temp_51f5f1b0/vue.js +347 -0
  6. package/CHANGELOG.md +5 -1
  7. package/README.md +124 -29
  8. package/dist/cjs/binary-tree.cjs +26282 -0
  9. package/dist/cjs/graph.cjs +5422 -0
  10. package/dist/cjs/hash.cjs +1310 -0
  11. package/dist/cjs/heap.cjs +1602 -0
  12. package/dist/cjs/index.cjs +31257 -14673
  13. package/dist/cjs/linked-list.cjs +4576 -0
  14. package/dist/cjs/matrix.cjs +1080 -0
  15. package/dist/cjs/priority-queue.cjs +1376 -0
  16. package/dist/cjs/queue.cjs +4264 -0
  17. package/dist/cjs/stack.cjs +907 -0
  18. package/dist/cjs/trie.cjs +1223 -0
  19. package/dist/cjs-legacy/binary-tree.cjs +26319 -0
  20. package/dist/cjs-legacy/graph.cjs +5420 -0
  21. package/dist/cjs-legacy/hash.cjs +1310 -0
  22. package/dist/cjs-legacy/heap.cjs +1599 -0
  23. package/dist/cjs-legacy/index.cjs +31268 -14679
  24. package/dist/cjs-legacy/linked-list.cjs +4582 -0
  25. package/dist/cjs-legacy/matrix.cjs +1083 -0
  26. package/dist/cjs-legacy/priority-queue.cjs +1374 -0
  27. package/dist/cjs-legacy/queue.cjs +4262 -0
  28. package/dist/cjs-legacy/stack.cjs +907 -0
  29. package/dist/cjs-legacy/trie.cjs +1222 -0
  30. package/dist/esm/binary-tree.mjs +26267 -0
  31. package/dist/esm/graph.mjs +5409 -0
  32. package/dist/esm/hash.mjs +1307 -0
  33. package/dist/esm/heap.mjs +1596 -0
  34. package/dist/esm/index.mjs +31254 -14674
  35. package/dist/esm/linked-list.mjs +4569 -0
  36. package/dist/esm/matrix.mjs +1076 -0
  37. package/dist/esm/priority-queue.mjs +1372 -0
  38. package/dist/esm/queue.mjs +4260 -0
  39. package/dist/esm/stack.mjs +905 -0
  40. package/dist/esm/trie.mjs +1220 -0
  41. package/dist/esm-legacy/binary-tree.mjs +26304 -0
  42. package/dist/esm-legacy/graph.mjs +5407 -0
  43. package/dist/esm-legacy/hash.mjs +1307 -0
  44. package/dist/esm-legacy/heap.mjs +1593 -0
  45. package/dist/esm-legacy/index.mjs +31265 -14680
  46. package/dist/esm-legacy/linked-list.mjs +4575 -0
  47. package/dist/esm-legacy/matrix.mjs +1079 -0
  48. package/dist/esm-legacy/priority-queue.mjs +1370 -0
  49. package/dist/esm-legacy/queue.mjs +4258 -0
  50. package/dist/esm-legacy/stack.mjs +905 -0
  51. package/dist/esm-legacy/trie.mjs +1219 -0
  52. package/dist/types/common/error.d.ts +9 -0
  53. package/dist/types/common/index.d.ts +1 -1
  54. package/dist/types/data-structures/base/index.d.ts +1 -0
  55. package/dist/types/data-structures/base/iterable-entry-base.d.ts +8 -8
  56. package/dist/types/data-structures/base/linear-base.d.ts +3 -3
  57. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +288 -0
  58. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +336 -0
  59. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +618 -18
  60. package/dist/types/data-structures/binary-tree/bst.d.ts +676 -1
  61. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +456 -0
  62. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +144 -1
  63. package/dist/types/data-structures/binary-tree/tree-map.d.ts +3307 -399
  64. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +3285 -360
  65. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +2674 -325
  66. package/dist/types/data-structures/binary-tree/tree-set.d.ts +3072 -287
  67. package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -4
  68. package/dist/types/data-structures/graph/directed-graph.d.ts +240 -0
  69. package/dist/types/data-structures/graph/undirected-graph.d.ts +216 -0
  70. package/dist/types/data-structures/hash/hash-map.d.ts +274 -10
  71. package/dist/types/data-structures/heap/heap.d.ts +336 -0
  72. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +411 -3
  73. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +363 -3
  74. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +434 -2
  75. package/dist/types/data-structures/matrix/matrix.d.ts +192 -0
  76. package/dist/types/data-structures/queue/deque.d.ts +364 -4
  77. package/dist/types/data-structures/queue/queue.d.ts +288 -0
  78. package/dist/types/data-structures/stack/stack.d.ts +240 -0
  79. package/dist/types/data-structures/trie/trie.d.ts +292 -4
  80. package/dist/types/interfaces/graph.d.ts +1 -1
  81. package/dist/types/types/common.d.ts +2 -2
  82. package/dist/types/types/data-structures/binary-tree/bst.d.ts +1 -0
  83. package/dist/types/types/data-structures/binary-tree/tree-map.d.ts +5 -0
  84. package/dist/types/types/data-structures/binary-tree/tree-multi-set.d.ts +4 -0
  85. package/dist/types/types/data-structures/binary-tree/tree-set.d.ts +4 -0
  86. package/dist/types/types/data-structures/heap/heap.d.ts +1 -0
  87. package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +1 -0
  88. package/dist/types/types/utils/validate-type.d.ts +4 -4
  89. package/dist/umd/data-structure-typed.js +31196 -14608
  90. package/dist/umd/data-structure-typed.min.js +11 -5
  91. package/docs-site-docusaurus/README.md +41 -0
  92. package/docs-site-docusaurus/docs/api/README.md +52 -0
  93. package/docs-site-docusaurus/docs/api/classes/AVLTree.md +6644 -0
  94. package/docs-site-docusaurus/docs/api/classes/AVLTreeNode.md +282 -0
  95. package/docs-site-docusaurus/docs/api/classes/AbstractGraph.md +2266 -0
  96. package/docs-site-docusaurus/docs/api/classes/BST.md +6293 -0
  97. package/docs-site-docusaurus/docs/api/classes/BSTNode.md +333 -0
  98. package/docs-site-docusaurus/docs/api/classes/BinaryIndexedTree.md +455 -0
  99. package/docs-site-docusaurus/docs/api/classes/BinaryTree.md +4647 -0
  100. package/docs-site-docusaurus/docs/api/classes/BinaryTreeNode.md +331 -0
  101. package/docs-site-docusaurus/docs/api/classes/Deque.md +2767 -0
  102. package/docs-site-docusaurus/docs/api/classes/DirectedGraph.md +2999 -0
  103. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedList.md +2685 -0
  104. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedListNode.md +221 -0
  105. package/docs-site-docusaurus/docs/api/classes/FibonacciHeap.md +253 -0
  106. package/docs-site-docusaurus/docs/api/classes/FibonacciHeapNode.md +21 -0
  107. package/docs-site-docusaurus/docs/api/classes/HashMap.md +1333 -0
  108. package/docs-site-docusaurus/docs/api/classes/Heap.md +1881 -0
  109. package/docs-site-docusaurus/docs/api/classes/IterableElementBase.md +800 -0
  110. package/docs-site-docusaurus/docs/api/classes/IterableEntryBase.md +644 -0
  111. package/docs-site-docusaurus/docs/api/classes/LinearBase.md +1632 -0
  112. package/docs-site-docusaurus/docs/api/classes/LinearLinkedBase.md +1853 -0
  113. package/docs-site-docusaurus/docs/api/classes/LinkedHashMap.md +1108 -0
  114. package/docs-site-docusaurus/docs/api/classes/LinkedListNode.md +156 -0
  115. package/docs-site-docusaurus/docs/api/classes/LinkedListQueue.md +2824 -0
  116. package/docs-site-docusaurus/docs/api/classes/MapGraph.md +2929 -0
  117. package/docs-site-docusaurus/docs/api/classes/Matrix.md +1026 -0
  118. package/docs-site-docusaurus/docs/api/classes/MaxHeap.md +1866 -0
  119. package/docs-site-docusaurus/docs/api/classes/MaxPriorityQueue.md +1883 -0
  120. package/docs-site-docusaurus/docs/api/classes/MinHeap.md +1879 -0
  121. package/docs-site-docusaurus/docs/api/classes/MinPriorityQueue.md +1882 -0
  122. package/docs-site-docusaurus/docs/api/classes/Navigator.md +109 -0
  123. package/docs-site-docusaurus/docs/api/classes/PriorityQueue.md +1839 -0
  124. package/docs-site-docusaurus/docs/api/classes/Queue.md +2244 -0
  125. package/docs-site-docusaurus/docs/api/classes/RedBlackTree.md +6888 -0
  126. package/docs-site-docusaurus/docs/api/classes/SegmentTree.md +372 -0
  127. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedList.md +2897 -0
  128. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedListNode.md +169 -0
  129. package/docs-site-docusaurus/docs/api/classes/SkipList.md +1229 -0
  130. package/docs-site-docusaurus/docs/api/classes/Stack.md +1573 -0
  131. package/docs-site-docusaurus/docs/api/classes/TreeMap.md +1389 -0
  132. package/docs-site-docusaurus/docs/api/classes/TreeMultiMap.md +1591 -0
  133. package/docs-site-docusaurus/docs/api/classes/TreeSet.md +1246 -0
  134. package/docs-site-docusaurus/docs/api/classes/Trie.md +1708 -0
  135. package/docs-site-docusaurus/docs/api/classes/TrieNode.md +199 -0
  136. package/docs-site-docusaurus/docs/api/classes/UndirectedGraph.md +2979 -0
  137. package/docs-site-docusaurus/docs/guide/_category_.json +6 -0
  138. package/docs-site-docusaurus/docs/guide/architecture.md +615 -0
  139. package/docs-site-docusaurus/docs/guide/concepts.md +451 -0
  140. package/docs-site-docusaurus/docs/guide/faq.md +180 -0
  141. package/docs-site-docusaurus/docs/guide/guides.md +597 -0
  142. package/docs-site-docusaurus/docs/guide/installation.md +62 -0
  143. package/docs-site-docusaurus/docs/guide/integrations.md +825 -0
  144. package/docs-site-docusaurus/docs/guide/overview.md +645 -0
  145. package/docs-site-docusaurus/docs/guide/performance.md +835 -0
  146. package/docs-site-docusaurus/docs/guide/quick-start.md +104 -0
  147. package/docs-site-docusaurus/docs/guide/use-cases/_category_.json +6 -0
  148. package/docs-site-docusaurus/docs/guide/use-cases/array-sort-alternative.md +158 -0
  149. package/docs-site-docusaurus/docs/guide/use-cases/heap-vs-sorting.md +92 -0
  150. package/docs-site-docusaurus/docs/guide/use-cases/map-vs-treemap.md +151 -0
  151. package/docs-site-docusaurus/docs/guide/use-cases/priority-queue-typescript.md +113 -0
  152. package/docs-site-docusaurus/docs/guide/use-cases/treemap-javascript.md +151 -0
  153. package/docs-site-docusaurus/docusaurus.config.ts +159 -0
  154. package/docs-site-docusaurus/fix-mdx-generics.mjs +75 -0
  155. package/docs-site-docusaurus/package-lock.json +18667 -0
  156. package/docs-site-docusaurus/package.json +50 -0
  157. package/docs-site-docusaurus/prefix-class-to-methods.mjs +48 -0
  158. package/docs-site-docusaurus/sidebars.ts +23 -0
  159. package/docs-site-docusaurus/sort-protected.mjs +87 -0
  160. package/docs-site-docusaurus/src/css/custom.css +96 -0
  161. package/docs-site-docusaurus/src/pages/index.module.css +13 -0
  162. package/docs-site-docusaurus/src/pages/index.tsx +120 -0
  163. package/docs-site-docusaurus/src/pages/markdown-page.md +7 -0
  164. package/docs-site-docusaurus/src/theme/TOCItems/index.tsx +34 -0
  165. package/docs-site-docusaurus/static/.nojekyll +0 -0
  166. package/docs-site-docusaurus/static/img/docusaurus-social-card.jpg +0 -0
  167. package/docs-site-docusaurus/static/img/docusaurus.png +0 -0
  168. package/docs-site-docusaurus/static/img/favicon.ico +0 -0
  169. package/docs-site-docusaurus/static/img/favicon.png +0 -0
  170. package/docs-site-docusaurus/static/img/logo-180.png +0 -0
  171. package/docs-site-docusaurus/static/img/logo.jpg +0 -0
  172. package/docs-site-docusaurus/static/img/logo.png +0 -0
  173. package/docs-site-docusaurus/static/img/logo.svg +1 -0
  174. package/docs-site-docusaurus/static/img/og-image.png +0 -0
  175. package/docs-site-docusaurus/static/img/undraw_docusaurus_mountain.svg +171 -0
  176. package/docs-site-docusaurus/static/img/undraw_docusaurus_react.svg +170 -0
  177. package/docs-site-docusaurus/static/img/undraw_docusaurus_tree.svg +40 -0
  178. package/docs-site-docusaurus/static/llms.txt +37 -0
  179. package/docs-site-docusaurus/static/robots.txt +4 -0
  180. package/docs-site-docusaurus/typedoc.json +23 -0
  181. package/llms.txt +37 -0
  182. package/package.json +159 -55
  183. package/src/common/error.ts +19 -1
  184. package/src/common/index.ts +1 -1
  185. package/src/data-structures/base/index.ts +1 -0
  186. package/src/data-structures/base/iterable-element-base.ts +3 -2
  187. package/src/data-structures/base/iterable-entry-base.ts +8 -8
  188. package/src/data-structures/base/linear-base.ts +3 -3
  189. package/src/data-structures/binary-tree/avl-tree.ts +287 -0
  190. package/src/data-structures/binary-tree/binary-indexed-tree.ts +327 -5
  191. package/src/data-structures/binary-tree/binary-tree.ts +581 -6
  192. package/src/data-structures/binary-tree/bst.ts +922 -7
  193. package/src/data-structures/binary-tree/red-black-tree.ts +453 -0
  194. package/src/data-structures/binary-tree/segment-tree.ts +139 -2
  195. package/src/data-structures/binary-tree/tree-map.ts +3300 -495
  196. package/src/data-structures/binary-tree/tree-multi-map.ts +3384 -563
  197. package/src/data-structures/binary-tree/tree-multi-set.ts +2757 -493
  198. package/src/data-structures/binary-tree/tree-set.ts +3122 -440
  199. package/src/data-structures/graph/abstract-graph.ts +6 -6
  200. package/src/data-structures/graph/directed-graph.ts +230 -0
  201. package/src/data-structures/graph/undirected-graph.ts +207 -0
  202. package/src/data-structures/hash/hash-map.ts +270 -19
  203. package/src/data-structures/heap/heap.ts +326 -4
  204. package/src/data-structures/heap/max-heap.ts +2 -2
  205. package/src/data-structures/linked-list/doubly-linked-list.ts +394 -3
  206. package/src/data-structures/linked-list/singly-linked-list.ts +348 -3
  207. package/src/data-structures/linked-list/skip-linked-list.ts +421 -7
  208. package/src/data-structures/matrix/matrix.ts +194 -10
  209. package/src/data-structures/priority-queue/max-priority-queue.ts +2 -2
  210. package/src/data-structures/queue/deque.ts +350 -5
  211. package/src/data-structures/queue/queue.ts +276 -0
  212. package/src/data-structures/stack/stack.ts +230 -0
  213. package/src/data-structures/trie/trie.ts +283 -7
  214. package/src/interfaces/graph.ts +1 -1
  215. package/src/types/common.ts +2 -2
  216. package/src/types/data-structures/binary-tree/bst.ts +1 -0
  217. package/src/types/data-structures/binary-tree/tree-map.ts +6 -0
  218. package/src/types/data-structures/binary-tree/tree-multi-set.ts +5 -0
  219. package/src/types/data-structures/binary-tree/tree-set.ts +5 -0
  220. package/src/types/data-structures/heap/heap.ts +1 -0
  221. package/src/types/data-structures/priority-queue/priority-queue.ts +1 -0
  222. package/src/types/utils/validate-type.ts +4 -4
  223. package/vercel.json +6 -0
  224. package/dist/leetcode/avl-tree-counter.mjs +0 -2957
  225. package/dist/leetcode/avl-tree-multi-map.mjs +0 -2889
  226. package/dist/leetcode/avl-tree.mjs +0 -2720
  227. package/dist/leetcode/binary-tree.mjs +0 -1594
  228. package/dist/leetcode/bst.mjs +0 -2398
  229. package/dist/leetcode/deque.mjs +0 -683
  230. package/dist/leetcode/directed-graph.mjs +0 -1733
  231. package/dist/leetcode/doubly-linked-list.mjs +0 -709
  232. package/dist/leetcode/hash-map.mjs +0 -493
  233. package/dist/leetcode/heap.mjs +0 -542
  234. package/dist/leetcode/max-heap.mjs +0 -375
  235. package/dist/leetcode/max-priority-queue.mjs +0 -383
  236. package/dist/leetcode/min-heap.mjs +0 -363
  237. package/dist/leetcode/min-priority-queue.mjs +0 -371
  238. package/dist/leetcode/priority-queue.mjs +0 -363
  239. package/dist/leetcode/queue.mjs +0 -943
  240. package/dist/leetcode/red-black-tree.mjs +0 -2765
  241. package/dist/leetcode/singly-linked-list.mjs +0 -754
  242. package/dist/leetcode/stack.mjs +0 -217
  243. package/dist/leetcode/tree-counter.mjs +0 -3039
  244. package/dist/leetcode/tree-multi-map.mjs +0 -2913
  245. package/dist/leetcode/trie.mjs +0 -413
  246. package/dist/leetcode/undirected-graph.mjs +0 -1650
@@ -1,413 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- var IterableElementBase = class {
4
- static {
5
- __name(this, "IterableElementBase");
6
- }
7
- constructor(options) {
8
- if (options) {
9
- const { toElementFn } = options;
10
- if (typeof toElementFn === "function") this._toElementFn = toElementFn;
11
- else if (toElementFn) throw new TypeError("toElementFn must be a function type");
12
- }
13
- }
14
- _toElementFn;
15
- get toElementFn() {
16
- return this._toElementFn;
17
- }
18
- *[Symbol.iterator](...args) {
19
- yield* this._getIterator(...args);
20
- }
21
- *values() {
22
- for (const item of this) yield item;
23
- }
24
- every(predicate, thisArg) {
25
- let index = 0;
26
- for (const item of this) {
27
- if (thisArg === void 0) {
28
- if (!predicate(item, index++, this)) return false;
29
- } else {
30
- const fn = predicate;
31
- if (!fn.call(thisArg, item, index++, this)) return false;
32
- }
33
- }
34
- return true;
35
- }
36
- some(predicate, thisArg) {
37
- let index = 0;
38
- for (const item of this) {
39
- if (thisArg === void 0) {
40
- if (predicate(item, index++, this)) return true;
41
- } else {
42
- const fn = predicate;
43
- if (fn.call(thisArg, item, index++, this)) return true;
44
- }
45
- }
46
- return false;
47
- }
48
- forEach(callbackfn, thisArg) {
49
- let index = 0;
50
- for (const item of this) {
51
- if (thisArg === void 0) {
52
- callbackfn(item, index++, this);
53
- } else {
54
- const fn = callbackfn;
55
- fn.call(thisArg, item, index++, this);
56
- }
57
- }
58
- }
59
- find(predicate, thisArg) {
60
- let index = 0;
61
- for (const item of this) {
62
- if (thisArg === void 0) {
63
- if (predicate(item, index++, this)) return item;
64
- } else {
65
- const fn = predicate;
66
- if (fn.call(thisArg, item, index++, this)) return item;
67
- }
68
- }
69
- return;
70
- }
71
- has(element) {
72
- for (const ele of this) if (ele === element) return true;
73
- return false;
74
- }
75
- reduce(callbackfn, initialValue) {
76
- let index = 0;
77
- const iter = this[Symbol.iterator]();
78
- let acc;
79
- if (arguments.length >= 2) {
80
- acc = initialValue;
81
- } else {
82
- const first = iter.next();
83
- if (first.done) throw new TypeError("Reduce of empty structure with no initial value");
84
- acc = first.value;
85
- index = 1;
86
- }
87
- for (const value of iter) {
88
- acc = callbackfn(acc, value, index++, this);
89
- }
90
- return acc;
91
- }
92
- toArray() {
93
- return [...this];
94
- }
95
- toVisual() {
96
- return [...this];
97
- }
98
- print() {
99
- console.log(this.toVisual());
100
- }
101
- };
102
- var TrieNode = class {
103
- static {
104
- __name(this, "TrieNode");
105
- }
106
- constructor(key) {
107
- this._key = key;
108
- this._isEnd = false;
109
- this._children = new Map();
110
- }
111
- _key;
112
- get key() {
113
- return this._key;
114
- }
115
- set key(value) {
116
- this._key = value;
117
- }
118
- _children;
119
- get children() {
120
- return this._children;
121
- }
122
- set children(value) {
123
- this._children = value;
124
- }
125
- _isEnd;
126
- get isEnd() {
127
- return this._isEnd;
128
- }
129
- set isEnd(value) {
130
- this._isEnd = value;
131
- }
132
- };
133
- var Trie = class extends IterableElementBase {
134
- static {
135
- __name(this, "Trie");
136
- }
137
- constructor(words = [], options) {
138
- super(options);
139
- if (options) {
140
- const { caseSensitive } = options;
141
- if (caseSensitive !== void 0) this._caseSensitive = caseSensitive;
142
- }
143
- if (words) {
144
- this.addMany(words);
145
- }
146
- }
147
- _size = 0;
148
- get size() {
149
- return this._size;
150
- }
151
- _caseSensitive = true;
152
- get caseSensitive() {
153
- return this._caseSensitive;
154
- }
155
- _root = new TrieNode("");
156
- get root() {
157
- return this._root;
158
- }
159
- get _total() {
160
- return this._size;
161
- }
162
- add(word) {
163
- word = this._caseProcess(word);
164
- let cur = this.root;
165
- let isNewWord = false;
166
- for (const c of word) {
167
- let nodeC = cur.children.get(c);
168
- if (!nodeC) {
169
- nodeC = new TrieNode(c);
170
- cur.children.set(c, nodeC);
171
- }
172
- cur = nodeC;
173
- }
174
- if (!cur.isEnd) {
175
- isNewWord = true;
176
- cur.isEnd = true;
177
- this._size++;
178
- }
179
- return isNewWord;
180
- }
181
- addMany(words) {
182
- const ans = [];
183
- for (const word of words) {
184
- if (this.toElementFn) {
185
- ans.push(this.add(this.toElementFn(word)));
186
- } else {
187
- ans.push(this.add(word));
188
- }
189
- }
190
- return ans;
191
- }
192
- has(word) {
193
- word = this._caseProcess(word);
194
- let cur = this.root;
195
- for (const c of word) {
196
- const nodeC = cur.children.get(c);
197
- if (!nodeC) return false;
198
- cur = nodeC;
199
- }
200
- return cur.isEnd;
201
- }
202
- isEmpty() {
203
- return this._size === 0;
204
- }
205
- clear() {
206
- this._size = 0;
207
- this._root = new TrieNode("");
208
- }
209
- delete(word) {
210
- word = this._caseProcess(word);
211
- let isDeleted = false;
212
- const dfs = __name((cur, i) => {
213
- const char = word[i];
214
- const child = cur.children.get(char);
215
- if (child) {
216
- if (i === word.length - 1) {
217
- if (child.isEnd) {
218
- if (child.children.size > 0) {
219
- child.isEnd = false;
220
- } else {
221
- cur.children.delete(char);
222
- }
223
- isDeleted = true;
224
- return true;
225
- }
226
- return false;
227
- }
228
- const res = dfs(child, i + 1);
229
- if (res && !cur.isEnd && child.children.size === 0) {
230
- cur.children.delete(char);
231
- return true;
232
- }
233
- return false;
234
- }
235
- return false;
236
- }, "dfs");
237
- dfs(this.root, 0);
238
- if (isDeleted) {
239
- this._size--;
240
- }
241
- return isDeleted;
242
- }
243
- getHeight() {
244
- const startNode = this.root;
245
- let maxDepth = 0;
246
- if (startNode) {
247
- const bfs = __name((node, level) => {
248
- if (level > maxDepth) {
249
- maxDepth = level;
250
- }
251
- const { children } = node;
252
- if (children) {
253
- for (const child of children.entries()) {
254
- bfs(child[1], level + 1);
255
- }
256
- }
257
- }, "bfs");
258
- bfs(startNode, 0);
259
- }
260
- return maxDepth;
261
- }
262
- hasPurePrefix(input) {
263
- input = this._caseProcess(input);
264
- let cur = this.root;
265
- for (const c of input) {
266
- const nodeC = cur.children.get(c);
267
- if (!nodeC) return false;
268
- cur = nodeC;
269
- }
270
- return !cur.isEnd;
271
- }
272
- hasPrefix(input) {
273
- input = this._caseProcess(input);
274
- let cur = this.root;
275
- for (const c of input) {
276
- const nodeC = cur.children.get(c);
277
- if (!nodeC) return false;
278
- cur = nodeC;
279
- }
280
- return true;
281
- }
282
- hasCommonPrefix(input) {
283
- input = this._caseProcess(input);
284
- let commonPre = "";
285
- const dfs = __name((cur) => {
286
- commonPre += cur.key;
287
- if (commonPre === input) return;
288
- if (cur.isEnd) return;
289
- if (cur && cur.children && cur.children.size === 1) dfs(Array.from(cur.children.values())[0]);
290
- else return;
291
- }, "dfs");
292
- dfs(this.root);
293
- return commonPre === input;
294
- }
295
- getLongestCommonPrefix() {
296
- let commonPre = "";
297
- const dfs = __name((cur) => {
298
- commonPre += cur.key;
299
- if (cur.isEnd) return;
300
- if (cur && cur.children && cur.children.size === 1) dfs(Array.from(cur.children.values())[0]);
301
- else return;
302
- }, "dfs");
303
- dfs(this.root);
304
- return commonPre;
305
- }
306
- getWords(prefix = "", max = Number.MAX_SAFE_INTEGER, isAllWhenEmptyPrefix = false) {
307
- prefix = this._caseProcess(prefix);
308
- const words = [];
309
- let found = 0;
310
- function dfs(node, word) {
311
- for (const char of node.children.keys()) {
312
- const charNode = node.children.get(char);
313
- if (charNode !== void 0) {
314
- dfs(charNode, word.concat(char));
315
- }
316
- }
317
- if (node.isEnd) {
318
- if (found > max - 1) return;
319
- words.push(word);
320
- found++;
321
- }
322
- }
323
- __name(dfs, "dfs");
324
- let startNode = this.root;
325
- if (prefix) {
326
- for (const c of prefix) {
327
- const nodeC = startNode.children.get(c);
328
- if (nodeC) {
329
- startNode = nodeC;
330
- } else {
331
- return [];
332
- }
333
- }
334
- }
335
- if (isAllWhenEmptyPrefix || startNode !== this.root) dfs(startNode, prefix);
336
- return words;
337
- }
338
- clone() {
339
- const next = this._createInstance();
340
- for (const x of this) next.add(x);
341
- return next;
342
- }
343
- filter(predicate, thisArg) {
344
- const results = this._createInstance();
345
- let index = 0;
346
- for (const word of this) {
347
- if (predicate.call(thisArg, word, index, this)) {
348
- results.add(word);
349
- }
350
- index++;
351
- }
352
- return results;
353
- }
354
- map(callback, options, thisArg) {
355
- const newTrie = this._createLike([], options);
356
- let i = 0;
357
- for (const x of this) {
358
- const v = thisArg === void 0 ? callback(x, i++, this) : callback.call(thisArg, x, i++, this);
359
- if (typeof v !== "string") {
360
- throw new TypeError(`Trie.map callback must return string; got ${typeof v}`);
361
- }
362
- newTrie.add(v);
363
- }
364
- return newTrie;
365
- }
366
- mapSame(callback, thisArg) {
367
- const next = this._createInstance();
368
- let i = 0;
369
- for (const key of this) {
370
- const mapped = thisArg === void 0 ? callback(key, i++, this) : callback.call(thisArg, key, i++, this);
371
- next.add(mapped);
372
- }
373
- return next;
374
- }
375
- _createInstance(options) {
376
- const Ctor = this.constructor;
377
- const next = new Ctor([], {
378
- toElementFn: this.toElementFn,
379
- caseSensitive: this.caseSensitive,
380
- ...options ?? {}
381
- });
382
- return next;
383
- }
384
- _createLike(elements = [], options) {
385
- const Ctor = this.constructor;
386
- return new Ctor(elements, options);
387
- }
388
- _spawnLike(options) {
389
- return this._createLike([], options);
390
- }
391
- *_getIterator() {
392
- function* _dfs(node, path) {
393
- if (node.isEnd) {
394
- yield path;
395
- }
396
- for (const [char, childNode] of node.children) {
397
- yield* _dfs(childNode, path + char);
398
- }
399
- }
400
- __name(_dfs, "_dfs");
401
- yield* _dfs(this.root, "");
402
- }
403
- _caseProcess(str) {
404
- if (!this._caseSensitive) {
405
- str = str.toLowerCase();
406
- }
407
- return str;
408
- }
409
- };
410
- export {
411
- Trie,
412
- TrieNode
413
- };