data-structure-typed 2.4.5 → 2.5.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.
Files changed (240) 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 +3 -1
  7. package/README.md +78 -31
  8. package/dist/cjs/binary-tree.cjs +23698 -0
  9. package/dist/cjs/graph.cjs +5236 -0
  10. package/dist/cjs/hash.cjs +1262 -0
  11. package/dist/cjs/heap.cjs +1540 -0
  12. package/dist/cjs/index.cjs +24509 -2899
  13. package/dist/cjs/linked-list.cjs +4370 -0
  14. package/dist/cjs/matrix.cjs +1042 -0
  15. package/dist/cjs/priority-queue.cjs +1314 -0
  16. package/dist/cjs/queue.cjs +4090 -0
  17. package/dist/cjs/stack.cjs +861 -0
  18. package/dist/cjs/trie.cjs +1173 -0
  19. package/dist/cjs-legacy/binary-tree.cjs +23730 -0
  20. package/dist/cjs-legacy/graph.cjs +5234 -0
  21. package/dist/cjs-legacy/hash.cjs +1262 -0
  22. package/dist/cjs-legacy/heap.cjs +1537 -0
  23. package/dist/cjs-legacy/index.cjs +32555 -10936
  24. package/dist/cjs-legacy/linked-list.cjs +4376 -0
  25. package/dist/cjs-legacy/matrix.cjs +1045 -0
  26. package/dist/cjs-legacy/priority-queue.cjs +1312 -0
  27. package/dist/cjs-legacy/queue.cjs +4088 -0
  28. package/dist/cjs-legacy/stack.cjs +861 -0
  29. package/dist/cjs-legacy/trie.cjs +1172 -0
  30. package/dist/esm/binary-tree.mjs +23683 -0
  31. package/dist/esm/graph.mjs +5223 -0
  32. package/dist/esm/hash.mjs +1259 -0
  33. package/dist/esm/heap.mjs +1534 -0
  34. package/dist/esm/index.mjs +24507 -2898
  35. package/dist/esm/linked-list.mjs +4363 -0
  36. package/dist/esm/matrix.mjs +1038 -0
  37. package/dist/esm/priority-queue.mjs +1310 -0
  38. package/dist/esm/queue.mjs +4086 -0
  39. package/dist/esm/stack.mjs +859 -0
  40. package/dist/esm/trie.mjs +1170 -0
  41. package/dist/esm-legacy/binary-tree.mjs +23715 -0
  42. package/dist/esm-legacy/graph.mjs +5221 -0
  43. package/dist/esm-legacy/hash.mjs +1259 -0
  44. package/dist/esm-legacy/heap.mjs +1531 -0
  45. package/dist/esm-legacy/index.mjs +32553 -10935
  46. package/dist/esm-legacy/linked-list.mjs +4369 -0
  47. package/dist/esm-legacy/matrix.mjs +1041 -0
  48. package/dist/esm-legacy/priority-queue.mjs +1308 -0
  49. package/dist/esm-legacy/queue.mjs +4084 -0
  50. package/dist/esm-legacy/stack.mjs +859 -0
  51. package/dist/esm-legacy/trie.mjs +1169 -0
  52. package/dist/types/data-structures/base/index.d.ts +1 -0
  53. package/dist/types/data-structures/base/iterable-element-base.d.ts +1 -1
  54. package/dist/types/data-structures/base/iterable-entry-base.d.ts +8 -8
  55. package/dist/types/data-structures/base/linear-base.d.ts +3 -3
  56. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +368 -51
  57. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +473 -147
  58. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +931 -80
  59. package/dist/types/data-structures/binary-tree/bst.d.ts +792 -29
  60. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +592 -32
  61. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +320 -135
  62. package/dist/types/data-structures/binary-tree/tree-map.d.ts +3662 -6
  63. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +3487 -201
  64. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +2778 -65
  65. package/dist/types/data-structures/binary-tree/tree-set.d.ts +3414 -6
  66. package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -4
  67. package/dist/types/data-structures/graph/directed-graph.d.ts +419 -47
  68. package/dist/types/data-structures/graph/map-graph.d.ts +59 -1
  69. package/dist/types/data-structures/graph/undirected-graph.d.ts +384 -59
  70. package/dist/types/data-structures/hash/hash-map.d.ts +462 -89
  71. package/dist/types/data-structures/heap/heap.d.ts +567 -99
  72. package/dist/types/data-structures/heap/max-heap.d.ts +46 -0
  73. package/dist/types/data-structures/heap/min-heap.d.ts +59 -0
  74. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +631 -49
  75. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +581 -68
  76. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +775 -12
  77. package/dist/types/data-structures/matrix/matrix.d.ts +491 -0
  78. package/dist/types/data-structures/priority-queue/max-priority-queue.d.ts +57 -0
  79. package/dist/types/data-structures/priority-queue/min-priority-queue.d.ts +60 -0
  80. package/dist/types/data-structures/priority-queue/priority-queue.d.ts +60 -0
  81. package/dist/types/data-structures/queue/deque.d.ts +578 -71
  82. package/dist/types/data-structures/queue/queue.d.ts +451 -42
  83. package/dist/types/data-structures/stack/stack.d.ts +374 -32
  84. package/dist/types/data-structures/trie/trie.d.ts +458 -48
  85. package/dist/types/interfaces/graph.d.ts +1 -1
  86. package/dist/types/types/common.d.ts +2 -2
  87. package/dist/types/types/data-structures/binary-tree/segment-tree.d.ts +1 -1
  88. package/dist/types/types/data-structures/heap/heap.d.ts +1 -0
  89. package/dist/types/types/data-structures/linked-list/skip-linked-list.d.ts +1 -4
  90. package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +1 -0
  91. package/dist/types/types/utils/validate-type.d.ts +4 -4
  92. package/dist/umd/data-structure-typed.js +32432 -10808
  93. package/dist/umd/data-structure-typed.min.js +10 -4
  94. package/docs-site-docusaurus/README.md +41 -0
  95. package/docs-site-docusaurus/docs/api/README.md +52 -0
  96. package/docs-site-docusaurus/docs/api/classes/AVLTree.md +6130 -0
  97. package/docs-site-docusaurus/docs/api/classes/AVLTreeNode.md +282 -0
  98. package/docs-site-docusaurus/docs/api/classes/AbstractGraph.md +2266 -0
  99. package/docs-site-docusaurus/docs/api/classes/BST.md +5831 -0
  100. package/docs-site-docusaurus/docs/api/classes/BSTNode.md +333 -0
  101. package/docs-site-docusaurus/docs/api/classes/BinaryIndexedTree.md +455 -0
  102. package/docs-site-docusaurus/docs/api/classes/BinaryTree.md +4647 -0
  103. package/docs-site-docusaurus/docs/api/classes/BinaryTreeNode.md +331 -0
  104. package/docs-site-docusaurus/docs/api/classes/Deque.md +2767 -0
  105. package/docs-site-docusaurus/docs/api/classes/DirectedGraph.md +2999 -0
  106. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedList.md +2685 -0
  107. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedListNode.md +221 -0
  108. package/docs-site-docusaurus/docs/api/classes/FibonacciHeap.md +253 -0
  109. package/docs-site-docusaurus/docs/api/classes/FibonacciHeapNode.md +21 -0
  110. package/docs-site-docusaurus/docs/api/classes/HashMap.md +1333 -0
  111. package/docs-site-docusaurus/docs/api/classes/Heap.md +1881 -0
  112. package/docs-site-docusaurus/docs/api/classes/IterableElementBase.md +800 -0
  113. package/docs-site-docusaurus/docs/api/classes/IterableEntryBase.md +644 -0
  114. package/docs-site-docusaurus/docs/api/classes/LinearBase.md +1632 -0
  115. package/docs-site-docusaurus/docs/api/classes/LinearLinkedBase.md +1853 -0
  116. package/docs-site-docusaurus/docs/api/classes/LinkedHashMap.md +1108 -0
  117. package/docs-site-docusaurus/docs/api/classes/LinkedListNode.md +156 -0
  118. package/docs-site-docusaurus/docs/api/classes/LinkedListQueue.md +2824 -0
  119. package/docs-site-docusaurus/docs/api/classes/MapGraph.md +2929 -0
  120. package/docs-site-docusaurus/docs/api/classes/Matrix.md +1026 -0
  121. package/docs-site-docusaurus/docs/api/classes/MaxHeap.md +1866 -0
  122. package/docs-site-docusaurus/docs/api/classes/MaxPriorityQueue.md +1883 -0
  123. package/docs-site-docusaurus/docs/api/classes/MinHeap.md +1879 -0
  124. package/docs-site-docusaurus/docs/api/classes/MinPriorityQueue.md +1882 -0
  125. package/docs-site-docusaurus/docs/api/classes/Navigator.md +109 -0
  126. package/docs-site-docusaurus/docs/api/classes/PriorityQueue.md +1839 -0
  127. package/docs-site-docusaurus/docs/api/classes/Queue.md +2244 -0
  128. package/docs-site-docusaurus/docs/api/classes/RedBlackTree.md +6374 -0
  129. package/docs-site-docusaurus/docs/api/classes/SegmentTree.md +372 -0
  130. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedList.md +2897 -0
  131. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedListNode.md +169 -0
  132. package/docs-site-docusaurus/docs/api/classes/SkipList.md +1229 -0
  133. package/docs-site-docusaurus/docs/api/classes/Stack.md +1573 -0
  134. package/docs-site-docusaurus/docs/api/classes/TreeMap.md +1257 -0
  135. package/docs-site-docusaurus/docs/api/classes/TreeMultiMap.md +1475 -0
  136. package/docs-site-docusaurus/docs/api/classes/TreeSet.md +1117 -0
  137. package/docs-site-docusaurus/docs/api/classes/Trie.md +1708 -0
  138. package/docs-site-docusaurus/docs/api/classes/TrieNode.md +199 -0
  139. package/docs-site-docusaurus/docs/api/classes/UndirectedGraph.md +2979 -0
  140. package/docs-site-docusaurus/docs/guide/_category_.json +6 -0
  141. package/docs-site-docusaurus/docs/guide/architecture.md +613 -0
  142. package/docs-site-docusaurus/docs/guide/concepts.md +420 -0
  143. package/docs-site-docusaurus/docs/guide/guides.md +611 -0
  144. package/docs-site-docusaurus/docs/guide/installation.md +60 -0
  145. package/docs-site-docusaurus/docs/guide/integrations.md +823 -0
  146. package/docs-site-docusaurus/docs/guide/overview.md +638 -0
  147. package/docs-site-docusaurus/docs/guide/performance.md +833 -0
  148. package/docs-site-docusaurus/docs/guide/quick-start.md +73 -0
  149. package/docs-site-docusaurus/docusaurus.config.ts +159 -0
  150. package/docs-site-docusaurus/fix-mdx-generics.mjs +75 -0
  151. package/docs-site-docusaurus/package-lock.json +18667 -0
  152. package/docs-site-docusaurus/package.json +50 -0
  153. package/docs-site-docusaurus/prefix-class-to-methods.mjs +48 -0
  154. package/docs-site-docusaurus/sidebars.ts +23 -0
  155. package/docs-site-docusaurus/sort-protected.mjs +87 -0
  156. package/docs-site-docusaurus/src/css/custom.css +96 -0
  157. package/docs-site-docusaurus/src/pages/index.module.css +13 -0
  158. package/docs-site-docusaurus/src/pages/index.tsx +71 -0
  159. package/docs-site-docusaurus/src/pages/markdown-page.md +7 -0
  160. package/docs-site-docusaurus/src/theme/TOCItems/index.tsx +34 -0
  161. package/docs-site-docusaurus/static/.nojekyll +0 -0
  162. package/docs-site-docusaurus/static/img/docusaurus-social-card.jpg +0 -0
  163. package/docs-site-docusaurus/static/img/docusaurus.png +0 -0
  164. package/docs-site-docusaurus/static/img/favicon.ico +0 -0
  165. package/docs-site-docusaurus/static/img/favicon.png +0 -0
  166. package/docs-site-docusaurus/static/img/logo-180.png +0 -0
  167. package/docs-site-docusaurus/static/img/logo.jpg +0 -0
  168. package/docs-site-docusaurus/static/img/logo.png +0 -0
  169. package/docs-site-docusaurus/static/img/logo.svg +1 -0
  170. package/docs-site-docusaurus/static/img/og-image.png +0 -0
  171. package/docs-site-docusaurus/static/img/undraw_docusaurus_mountain.svg +171 -0
  172. package/docs-site-docusaurus/static/img/undraw_docusaurus_react.svg +170 -0
  173. package/docs-site-docusaurus/static/img/undraw_docusaurus_tree.svg +40 -0
  174. package/docs-site-docusaurus/static/robots.txt +4 -0
  175. package/docs-site-docusaurus/typedoc.json +23 -0
  176. package/package.json +109 -12
  177. package/src/data-structures/base/index.ts +1 -0
  178. package/src/data-structures/base/iterable-element-base.ts +4 -5
  179. package/src/data-structures/base/iterable-entry-base.ts +8 -8
  180. package/src/data-structures/base/linear-base.ts +3 -3
  181. package/src/data-structures/binary-tree/avl-tree.ts +386 -51
  182. package/src/data-structures/binary-tree/binary-indexed-tree.ts +596 -247
  183. package/src/data-structures/binary-tree/binary-tree.ts +956 -81
  184. package/src/data-structures/binary-tree/bst.ts +840 -35
  185. package/src/data-structures/binary-tree/red-black-tree.ts +689 -97
  186. package/src/data-structures/binary-tree/segment-tree.ts +498 -249
  187. package/src/data-structures/binary-tree/tree-map.ts +3784 -7
  188. package/src/data-structures/binary-tree/tree-multi-map.ts +3614 -211
  189. package/src/data-structures/binary-tree/tree-multi-set.ts +2874 -65
  190. package/src/data-structures/binary-tree/tree-set.ts +3531 -10
  191. package/src/data-structures/graph/abstract-graph.ts +4 -4
  192. package/src/data-structures/graph/directed-graph.ts +429 -47
  193. package/src/data-structures/graph/map-graph.ts +59 -1
  194. package/src/data-structures/graph/undirected-graph.ts +393 -59
  195. package/src/data-structures/hash/hash-map.ts +476 -92
  196. package/src/data-structures/heap/heap.ts +581 -99
  197. package/src/data-structures/heap/max-heap.ts +46 -0
  198. package/src/data-structures/heap/min-heap.ts +59 -0
  199. package/src/data-structures/linked-list/doubly-linked-list.ts +646 -47
  200. package/src/data-structures/linked-list/singly-linked-list.ts +596 -68
  201. package/src/data-structures/linked-list/skip-linked-list.ts +1067 -90
  202. package/src/data-structures/matrix/matrix.ts +584 -12
  203. package/src/data-structures/priority-queue/max-priority-queue.ts +57 -0
  204. package/src/data-structures/priority-queue/min-priority-queue.ts +60 -0
  205. package/src/data-structures/priority-queue/priority-queue.ts +60 -0
  206. package/src/data-structures/queue/deque.ts +592 -70
  207. package/src/data-structures/queue/queue.ts +463 -42
  208. package/src/data-structures/stack/stack.ts +384 -32
  209. package/src/data-structures/trie/trie.ts +470 -48
  210. package/src/interfaces/graph.ts +1 -1
  211. package/src/types/common.ts +2 -2
  212. package/src/types/data-structures/binary-tree/segment-tree.ts +1 -1
  213. package/src/types/data-structures/heap/heap.ts +1 -0
  214. package/src/types/data-structures/linked-list/skip-linked-list.ts +2 -1
  215. package/src/types/data-structures/priority-queue/priority-queue.ts +1 -0
  216. package/src/types/utils/validate-type.ts +4 -4
  217. package/vercel.json +6 -0
  218. package/dist/leetcode/avl-tree-counter.mjs +0 -2957
  219. package/dist/leetcode/avl-tree-multi-map.mjs +0 -2889
  220. package/dist/leetcode/avl-tree.mjs +0 -2720
  221. package/dist/leetcode/binary-tree.mjs +0 -1594
  222. package/dist/leetcode/bst.mjs +0 -2398
  223. package/dist/leetcode/deque.mjs +0 -683
  224. package/dist/leetcode/directed-graph.mjs +0 -1733
  225. package/dist/leetcode/doubly-linked-list.mjs +0 -709
  226. package/dist/leetcode/hash-map.mjs +0 -493
  227. package/dist/leetcode/heap.mjs +0 -542
  228. package/dist/leetcode/max-heap.mjs +0 -375
  229. package/dist/leetcode/max-priority-queue.mjs +0 -383
  230. package/dist/leetcode/min-heap.mjs +0 -363
  231. package/dist/leetcode/min-priority-queue.mjs +0 -371
  232. package/dist/leetcode/priority-queue.mjs +0 -363
  233. package/dist/leetcode/queue.mjs +0 -943
  234. package/dist/leetcode/red-black-tree.mjs +0 -2765
  235. package/dist/leetcode/singly-linked-list.mjs +0 -754
  236. package/dist/leetcode/stack.mjs +0 -217
  237. package/dist/leetcode/tree-counter.mjs +0 -3039
  238. package/dist/leetcode/tree-multi-map.mjs +0 -2913
  239. package/dist/leetcode/trie.mjs +0 -413
  240. 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
- };