data-structure-typed 1.54.3 → 2.0.0

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 (174) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/benchmark/report.html +26 -2
  3. package/benchmark/report.json +292 -42
  4. package/dist/cjs/data-structures/base/iterable-element-base.d.ts +14 -40
  5. package/dist/cjs/data-structures/base/iterable-element-base.js +14 -11
  6. package/dist/cjs/data-structures/base/iterable-element-base.js.map +1 -1
  7. package/dist/cjs/data-structures/base/linear-base.d.ts +277 -0
  8. package/dist/cjs/data-structures/base/linear-base.js +553 -0
  9. package/dist/cjs/data-structures/base/linear-base.js.map +1 -0
  10. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +12 -8
  11. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +50 -37
  12. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  13. package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +64 -0
  14. package/dist/cjs/data-structures/binary-tree/avl-tree.js +64 -0
  15. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  16. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +62 -0
  17. package/dist/cjs/data-structures/binary-tree/binary-tree.js +67 -5
  18. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  19. package/dist/cjs/data-structures/binary-tree/bst.d.ts +3 -3
  20. package/dist/cjs/data-structures/binary-tree/bst.js +14 -14
  21. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  22. package/dist/cjs/data-structures/binary-tree/red-black-tree.d.ts +1 -7
  23. package/dist/cjs/data-structures/binary-tree/red-black-tree.js +1 -7
  24. package/dist/cjs/data-structures/binary-tree/red-black-tree.js.map +1 -1
  25. package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +175 -14
  26. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +210 -40
  27. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  28. package/dist/cjs/data-structures/graph/abstract-graph.js +2 -2
  29. package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
  30. package/dist/cjs/data-structures/heap/heap.d.ts +3 -11
  31. package/dist/cjs/data-structures/heap/heap.js +0 -10
  32. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  33. package/dist/cjs/data-structures/heap/max-heap.d.ts +2 -2
  34. package/dist/cjs/data-structures/heap/max-heap.js.map +1 -1
  35. package/dist/cjs/data-structures/heap/min-heap.d.ts +2 -2
  36. package/dist/cjs/data-structures/heap/min-heap.js.map +1 -1
  37. package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +65 -94
  38. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +131 -146
  39. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  40. package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +79 -75
  41. package/dist/cjs/data-structures/linked-list/singly-linked-list.js +217 -169
  42. package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
  43. package/dist/cjs/data-structures/priority-queue/max-priority-queue.d.ts +2 -2
  44. package/dist/cjs/data-structures/priority-queue/max-priority-queue.js.map +1 -1
  45. package/dist/cjs/data-structures/priority-queue/min-priority-queue.d.ts +2 -2
  46. package/dist/cjs/data-structures/priority-queue/min-priority-queue.js.map +1 -1
  47. package/dist/cjs/data-structures/priority-queue/priority-queue.d.ts +2 -2
  48. package/dist/cjs/data-structures/priority-queue/priority-queue.js.map +1 -1
  49. package/dist/cjs/data-structures/queue/deque.d.ts +130 -91
  50. package/dist/cjs/data-structures/queue/deque.js +269 -169
  51. package/dist/cjs/data-structures/queue/deque.js.map +1 -1
  52. package/dist/cjs/data-structures/queue/queue.d.ts +84 -40
  53. package/dist/cjs/data-structures/queue/queue.js +134 -50
  54. package/dist/cjs/data-structures/queue/queue.js.map +1 -1
  55. package/dist/cjs/data-structures/stack/stack.d.ts +3 -11
  56. package/dist/cjs/data-structures/stack/stack.js +0 -10
  57. package/dist/cjs/data-structures/stack/stack.js.map +1 -1
  58. package/dist/cjs/data-structures/trie/trie.d.ts +4 -3
  59. package/dist/cjs/data-structures/trie/trie.js +3 -0
  60. package/dist/cjs/data-structures/trie/trie.js.map +1 -1
  61. package/dist/cjs/types/data-structures/base/base.d.ts +9 -4
  62. package/dist/cjs/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +1 -1
  63. package/dist/cjs/types/data-structures/binary-tree/tree-multi-map.d.ts +1 -1
  64. package/dist/cjs/types/data-structures/linked-list/doubly-linked-list.d.ts +2 -2
  65. package/dist/cjs/types/data-structures/linked-list/singly-linked-list.d.ts +2 -2
  66. package/dist/cjs/types/data-structures/queue/deque.d.ts +2 -3
  67. package/dist/cjs/types/data-structures/queue/queue.d.ts +2 -2
  68. package/dist/esm/data-structures/base/iterable-element-base.d.ts +14 -40
  69. package/dist/esm/data-structures/base/iterable-element-base.js +14 -11
  70. package/dist/esm/data-structures/base/iterable-element-base.js.map +1 -1
  71. package/dist/esm/data-structures/base/linear-base.d.ts +277 -0
  72. package/dist/esm/data-structures/base/linear-base.js +549 -0
  73. package/dist/esm/data-structures/base/linear-base.js.map +1 -0
  74. package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.d.ts +12 -8
  75. package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js +50 -36
  76. package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  77. package/dist/esm/data-structures/binary-tree/avl-tree.d.ts +64 -0
  78. package/dist/esm/data-structures/binary-tree/avl-tree.js +64 -0
  79. package/dist/esm/data-structures/binary-tree/avl-tree.js.map +1 -1
  80. package/dist/esm/data-structures/binary-tree/binary-tree.d.ts +62 -0
  81. package/dist/esm/data-structures/binary-tree/binary-tree.js +67 -5
  82. package/dist/esm/data-structures/binary-tree/binary-tree.js.map +1 -1
  83. package/dist/esm/data-structures/binary-tree/bst.d.ts +3 -3
  84. package/dist/esm/data-structures/binary-tree/bst.js +14 -12
  85. package/dist/esm/data-structures/binary-tree/bst.js.map +1 -1
  86. package/dist/esm/data-structures/binary-tree/red-black-tree.d.ts +1 -7
  87. package/dist/esm/data-structures/binary-tree/red-black-tree.js +1 -7
  88. package/dist/esm/data-structures/binary-tree/red-black-tree.js.map +1 -1
  89. package/dist/esm/data-structures/binary-tree/tree-multi-map.d.ts +175 -14
  90. package/dist/esm/data-structures/binary-tree/tree-multi-map.js +210 -39
  91. package/dist/esm/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  92. package/dist/esm/data-structures/graph/abstract-graph.js +2 -2
  93. package/dist/esm/data-structures/graph/abstract-graph.js.map +1 -1
  94. package/dist/esm/data-structures/heap/heap.d.ts +3 -11
  95. package/dist/esm/data-structures/heap/heap.js +0 -10
  96. package/dist/esm/data-structures/heap/heap.js.map +1 -1
  97. package/dist/esm/data-structures/heap/max-heap.d.ts +2 -2
  98. package/dist/esm/data-structures/heap/max-heap.js.map +1 -1
  99. package/dist/esm/data-structures/heap/min-heap.d.ts +2 -2
  100. package/dist/esm/data-structures/heap/min-heap.js.map +1 -1
  101. package/dist/esm/data-structures/linked-list/doubly-linked-list.d.ts +65 -94
  102. package/dist/esm/data-structures/linked-list/doubly-linked-list.js +132 -148
  103. package/dist/esm/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  104. package/dist/esm/data-structures/linked-list/singly-linked-list.d.ts +79 -75
  105. package/dist/esm/data-structures/linked-list/singly-linked-list.js +217 -170
  106. package/dist/esm/data-structures/linked-list/singly-linked-list.js.map +1 -1
  107. package/dist/esm/data-structures/priority-queue/max-priority-queue.d.ts +2 -2
  108. package/dist/esm/data-structures/priority-queue/max-priority-queue.js.map +1 -1
  109. package/dist/esm/data-structures/priority-queue/min-priority-queue.d.ts +2 -2
  110. package/dist/esm/data-structures/priority-queue/min-priority-queue.js.map +1 -1
  111. package/dist/esm/data-structures/priority-queue/priority-queue.d.ts +2 -2
  112. package/dist/esm/data-structures/priority-queue/priority-queue.js.map +1 -1
  113. package/dist/esm/data-structures/queue/deque.d.ts +130 -91
  114. package/dist/esm/data-structures/queue/deque.js +269 -169
  115. package/dist/esm/data-structures/queue/deque.js.map +1 -1
  116. package/dist/esm/data-structures/queue/queue.d.ts +84 -40
  117. package/dist/esm/data-structures/queue/queue.js +135 -51
  118. package/dist/esm/data-structures/queue/queue.js.map +1 -1
  119. package/dist/esm/data-structures/stack/stack.d.ts +3 -11
  120. package/dist/esm/data-structures/stack/stack.js +0 -10
  121. package/dist/esm/data-structures/stack/stack.js.map +1 -1
  122. package/dist/esm/data-structures/trie/trie.d.ts +4 -3
  123. package/dist/esm/data-structures/trie/trie.js +3 -0
  124. package/dist/esm/data-structures/trie/trie.js.map +1 -1
  125. package/dist/esm/types/data-structures/base/base.d.ts +9 -4
  126. package/dist/esm/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +1 -1
  127. package/dist/esm/types/data-structures/binary-tree/tree-multi-map.d.ts +1 -1
  128. package/dist/esm/types/data-structures/linked-list/doubly-linked-list.d.ts +2 -2
  129. package/dist/esm/types/data-structures/linked-list/singly-linked-list.d.ts +2 -2
  130. package/dist/esm/types/data-structures/queue/deque.d.ts +2 -3
  131. package/dist/esm/types/data-structures/queue/queue.d.ts +2 -2
  132. package/dist/umd/data-structure-typed.js +1246 -635
  133. package/dist/umd/data-structure-typed.min.js +3 -3
  134. package/dist/umd/data-structure-typed.min.js.map +1 -1
  135. package/package.json +6 -6
  136. package/src/data-structures/base/iterable-element-base.ts +29 -20
  137. package/src/data-structures/base/linear-base.ts +649 -0
  138. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +51 -36
  139. package/src/data-structures/binary-tree/avl-tree.ts +64 -0
  140. package/src/data-structures/binary-tree/binary-tree.ts +5 -5
  141. package/src/data-structures/binary-tree/bst.ts +9 -9
  142. package/src/data-structures/binary-tree/tree-multi-map.ts +214 -40
  143. package/src/data-structures/graph/abstract-graph.ts +2 -2
  144. package/src/data-structures/heap/heap.ts +3 -14
  145. package/src/data-structures/heap/max-heap.ts +2 -2
  146. package/src/data-structures/heap/min-heap.ts +2 -2
  147. package/src/data-structures/linked-list/doubly-linked-list.ts +144 -160
  148. package/src/data-structures/linked-list/singly-linked-list.ts +241 -185
  149. package/src/data-structures/priority-queue/max-priority-queue.ts +2 -5
  150. package/src/data-structures/priority-queue/min-priority-queue.ts +2 -5
  151. package/src/data-structures/priority-queue/priority-queue.ts +2 -2
  152. package/src/data-structures/queue/deque.ts +286 -183
  153. package/src/data-structures/queue/queue.ts +149 -63
  154. package/src/data-structures/stack/stack.ts +3 -18
  155. package/src/data-structures/trie/trie.ts +7 -3
  156. package/src/types/data-structures/base/base.ts +17 -8
  157. package/src/types/data-structures/binary-tree/avl-tree-multi-map.ts +1 -1
  158. package/src/types/data-structures/binary-tree/tree-multi-map.ts +1 -1
  159. package/src/types/data-structures/linked-list/doubly-linked-list.ts +2 -2
  160. package/src/types/data-structures/linked-list/singly-linked-list.ts +2 -2
  161. package/src/types/data-structures/queue/deque.ts +2 -3
  162. package/src/types/data-structures/queue/queue.ts +2 -2
  163. package/test/integration/all-in-one.test.ts +1 -1
  164. package/test/integration/avl-tree.test.ts +1 -1
  165. package/test/integration/bst.test.ts +2 -2
  166. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +168 -0
  167. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +15 -14
  168. package/test/unit/data-structures/binary-tree/red-black-tree.test.ts +1 -1
  169. package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +165 -7
  170. package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +135 -27
  171. package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +111 -11
  172. package/test/unit/data-structures/queue/deque.test.ts +241 -60
  173. package/test/unit/data-structures/queue/queue.test.ts +118 -19
  174. package/test/unit/unrestricted-interconversion.test.ts +1 -1
@@ -72,37 +72,40 @@ class AVLTreeMultiMap extends avl_tree_1.AVLTree {
72
72
  * provided options.
73
73
  */
74
74
  createTree(options) {
75
- return new AVLTreeMultiMap([], Object.assign({ iterationType: this.iterationType, specifyComparable: this._specifyComparable, toEntryFn: this._toEntryFn, isReverse: this._isReverse }, options));
75
+ return new AVLTreeMultiMap([], Object.assign({ iterationType: this.iterationType, specifyComparable: this._specifyComparable, toEntryFn: this._toEntryFn, isReverse: this._isReverse, isMapMode: this._isMapMode }, options));
76
76
  }
77
77
  /**
78
78
  * Time Complexity: O(1)
79
79
  * Space Complexity: O(1)
80
80
  *
81
- * The function `createNode` overrides the method to create a new AVLTreeMultiMapNode with a
82
- * specified key and an empty array of values.
83
- * @param {K} key - The `key` parameter in the `createNode` method represents the key of the node
84
- * that will be created in the AVLTreeMultiMap.
85
- * @returns An AVLTreeMultiMapNode object is being returned, initialized with the provided key and an
86
- * empty array.
81
+ * The `createNode` function in TypeScript overrides the default implementation to create a new
82
+ * AVLTreeMultiMapNode with a specified key and value array.
83
+ * @param {K} key - The `key` parameter represents the key of the node being created in the
84
+ * AVLTreeMultiMap.
85
+ * @param {V[]} value - The `value` parameter in the `createNode` method represents an array of
86
+ * values associated with a specific key in the AVLTreeMultiMapNode. If no value is provided when
87
+ * calling the method, an empty array `[]` is used as the default value.
88
+ * @returns An AVLTreeMultiMapNode object is being returned, with the specified key and value. If the
89
+ * AVLTreeMultiMap is in map mode, an empty array is used as the value, otherwise the provided value
90
+ * array is used.
87
91
  */
88
- createNode(key) {
89
- return new AVLTreeMultiMapNode(key, []);
92
+ createNode(key, value = []) {
93
+ return new AVLTreeMultiMapNode(key, this._isMapMode ? [] : value);
90
94
  }
91
95
  /**
92
96
  * Time Complexity: O(log n)
93
97
  * Space Complexity: O(log n)
94
98
  *
95
- * The function `add` in TypeScript overrides the superclass method to add key-value pairs to an AVL
96
- * tree multi-map.
97
- * @param {K | AVLTreeMultiMapNode<K, V> | [K | null | undefined, V[] | undefined] | null | undefined | K} keyNodeOrEntry - The `keyNodeOrEntry`
98
- * parameter in the `override add` method can be either a key-value pair entry or just a key. If it
99
- * is a key-value pair entry, it will be in the format `[key, values]`, where `key` is the key and
100
- * `values`
101
- * @param {V} [value] - The `value` parameter in the `override add` method represents the value that
102
- * you want to add to the AVLTreeMultiMap. It can be a single value or an array of values associated
103
- * with a specific key.
104
- * @returns The `override add` method is returning a boolean value, which indicates whether the
105
- * addition operation was successful or not.
99
+ * The function `add` in this TypeScript code overrides the superclass method to add key-value pairs
100
+ * to an AVLTreeMultiMap, handling different input types and scenarios.
101
+ * @param [key] - The `key` parameter in the `override add` method represents the key of the entry to
102
+ * be added to the AVLTreeMultiMap. It can be of type `K`, which is the key type of the map. The key
103
+ * can be a single key value, a node of the AVLTree
104
+ * @param {V[]} [values] - The `values` parameter in the `add` method represents an array of values
105
+ * that you want to add to the AVLTreeMultiMap. It can contain one or more values associated with a
106
+ * specific key.
107
+ * @returns The `add` method is returning a boolean value, which indicates whether the operation was
108
+ * successful or not.
106
109
  */
107
110
  add(keyNodeOrEntry, value) {
108
111
  if (this.isRealNode(keyNodeOrEntry))
@@ -110,30 +113,40 @@ class AVLTreeMultiMap extends avl_tree_1.AVLTree {
110
113
  const _commonAdd = (key, values) => {
111
114
  if (key === undefined || key === null)
112
115
  return false;
113
- const existingValues = this.get(key);
114
- if (existingValues !== undefined && values !== undefined) {
115
- for (const value of values)
116
- existingValues.push(value);
117
- return true;
118
- }
119
- const existingNode = this.getNode(key);
120
- if (this.isRealNode(existingNode)) {
121
- if (existingValues === undefined) {
122
- super.add(key, values);
123
- return true;
124
- }
125
- if (values !== undefined) {
116
+ const _addToValues = () => {
117
+ const existingValues = this.get(key);
118
+ if (existingValues !== undefined && values !== undefined) {
126
119
  for (const value of values)
127
120
  existingValues.push(value);
128
121
  return true;
129
122
  }
123
+ return false;
124
+ };
125
+ const _addByNode = () => {
126
+ const existingNode = this.getNode(key);
127
+ if (this.isRealNode(existingNode)) {
128
+ const existingValues = this.get(existingNode);
129
+ if (existingValues === undefined) {
130
+ super.add(key, values);
131
+ return true;
132
+ }
133
+ if (values !== undefined) {
134
+ for (const value of values)
135
+ existingValues.push(value);
136
+ return true;
137
+ }
138
+ else {
139
+ return false;
140
+ }
141
+ }
130
142
  else {
131
- return false;
143
+ return super.add(key, values);
132
144
  }
145
+ };
146
+ if (this._isMapMode) {
147
+ return _addByNode() || _addToValues();
133
148
  }
134
- else {
135
- return super.add(key, values);
136
- }
149
+ return _addToValues() || _addByNode();
137
150
  };
138
151
  if (this.isEntry(keyNodeOrEntry)) {
139
152
  const [key, values] = keyNodeOrEntry;
@@ -1 +1 @@
1
- {"version":3,"file":"avl-tree-multi-map.js","sourceRoot":"","sources":["../../../../src/data-structures/binary-tree/avl-tree-multi-map.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"avl-tree-multi-map.js","sourceRoot":"","sources":["../../../../src/data-structures/binary-tree/avl-tree-multi-map.ts"],"names":[],"mappings":";;;AAQA,yCAAkD;AAGlD,MAAa,mBAAsC,SAAQ,sBAAmB;IAG5E;;;;;;;;OAQG;IACH,YAAY,GAAM,EAAE,KAAU;QAC5B,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAZX,WAAM,GAA+B,SAAS,CAAC;QAe/C,UAAK,GAAkD,SAAS,CAAC;QAajE,WAAM,GAAkD,SAAS,CAAC;IAf3E,CAAC;IAID,IAAa,IAAI;QACf,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,IAAa,IAAI,CAAC,CAA+C;QAC/D,IAAI,CAAC,EAAE,CAAC;YACN,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACjB,CAAC;IAID,IAAa,KAAK;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAa,KAAK,CAAC,CAA+C;QAChE,IAAI,CAAC,EAAE,CAAC;YACN,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB,CAAC;CACF;AAzCD,kDAyCC;AAED;;GAEG;AACH,MAAa,eACX,SAAQ,kBAAgC;IAGxC;;;;;;;;;;OAUG;IACH,YACE,yBAEI,EAAE,EACN,OAA2C;QAE3C,KAAK,CAAC,EAAE,kCAAO,OAAO,KAAE,SAAS,EAAE,IAAI,IAAG,CAAC;QAC3C,IAAI,sBAAsB,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED;;;;;;;;;;;OAWG;IACM,UAAU,CAAC,OAA2C;QAC7D,OAAO,IAAI,eAAe,CAAsB,EAAE,kBAChD,aAAa,EAAE,IAAI,CAAC,aAAa,EACjC,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAC1C,SAAS,EAAE,IAAI,CAAC,UAAU,EAC1B,SAAS,EAAE,IAAI,CAAC,UAAU,EAC1B,SAAS,EAAE,IAAI,CAAC,UAAU,IACvB,OAAO,EACV,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACM,UAAU,CAAC,GAAM,EAAE,QAAa,EAAE;QACzC,OAAO,IAAI,mBAAmB,CAAO,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1E,CAAC;IAQD;;;;;;;;;;;;;;OAcG;IACM,GAAG,CACV,cAA8G,EAC9G,KAAS;QAET,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;YAAE,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAEtE,MAAM,UAAU,GAAG,CAAC,GAAwB,EAAE,MAAY,EAAE,EAAE;YAC5D,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;YAEpD,MAAM,YAAY,GAAG,GAAG,EAAE;gBACxB,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACrC,IAAI,cAAc,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACzD,KAAK,MAAM,KAAK,IAAI,MAAM;wBAAE,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACvD,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC,CAAC;YAEF,MAAM,UAAU,GAAG,GAAG,EAAE;gBACtB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACvC,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;oBAClC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBAC9C,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;wBACjC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;wBACvB,OAAO,IAAI,CAAC;oBACd,CAAC;oBACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;wBACzB,KAAK,MAAM,KAAK,IAAI,MAAM;4BAAE,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACvD,OAAO,IAAI,CAAC;oBACd,CAAC;yBAAM,CAAC;wBACN,OAAO,KAAK,CAAC;oBACf,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC,CAAC;YAEF,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,OAAO,UAAU,EAAE,IAAI,YAAY,EAAE,CAAC;YACxC,CAAC;YACD,OAAO,YAAY,EAAE,IAAI,UAAU,EAAE,CAAC;QACxC,CAAC,CAAC;QAEF,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,cAAc,CAAC;YACrC,OAAO,UAAU,CAAC,GAAG,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACjE,CAAC;QAED,OAAO,UAAU,CAAC,cAAc,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC/E,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,WAAW,CACT,cAA8G,EAC9G,KAAQ;QAER,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,KAAK,KAAK,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAExB,4CAA4C;YAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAErD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;OAOG;IACM,KAAK;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AA7LD,0CA6LC"}
@@ -35,6 +35,70 @@ export declare class AVLTreeNode<K = any, V = any> extends BSTNode<K, V> {
35
35
  * 5. Efficient Lookups: Offers O(log n) search time, where 'n' is the number of nodes, due to its balanced nature.
36
36
  * 6. Complex Insertions and Deletions: Due to rebalancing, these operations are more complex than in a regular BST.
37
37
  * 7. Path Length: The path length from the root to any leaf is longer compared to an unbalanced BST, but shorter than a linear chain of nodes.
38
+ * @example
39
+ * // Find elements in a range
40
+ * // In interval queries, AVL trees, with their strictly balanced structure and lower height, offer better query efficiency, making them ideal for frequent and high-performance interval queries. In contrast, Red-Black trees, with lower update costs, are more suitable for scenarios involving frequent insertions and deletions where the requirements for interval queries are less demanding.
41
+ * type Datum = { timestamp: Date; temperature: number };
42
+ * // Fixed dataset of CPU temperature readings
43
+ * const cpuData: Datum[] = [
44
+ * { timestamp: new Date('2024-12-02T00:00:00'), temperature: 55.1 },
45
+ * { timestamp: new Date('2024-12-02T00:01:00'), temperature: 56.3 },
46
+ * { timestamp: new Date('2024-12-02T00:02:00'), temperature: 54.8 },
47
+ * { timestamp: new Date('2024-12-02T00:03:00'), temperature: 57.2 },
48
+ * { timestamp: new Date('2024-12-02T00:04:00'), temperature: 58.0 },
49
+ * { timestamp: new Date('2024-12-02T00:05:00'), temperature: 59.4 },
50
+ * { timestamp: new Date('2024-12-02T00:06:00'), temperature: 60.1 },
51
+ * { timestamp: new Date('2024-12-02T00:07:00'), temperature: 61.3 },
52
+ * { timestamp: new Date('2024-12-02T00:08:00'), temperature: 62.0 },
53
+ * { timestamp: new Date('2024-12-02T00:09:00'), temperature: 63.5 },
54
+ * { timestamp: new Date('2024-12-02T00:10:00'), temperature: 64.0 },
55
+ * { timestamp: new Date('2024-12-02T00:11:00'), temperature: 62.8 },
56
+ * { timestamp: new Date('2024-12-02T00:12:00'), temperature: 61.5 },
57
+ * { timestamp: new Date('2024-12-02T00:13:00'), temperature: 60.2 },
58
+ * { timestamp: new Date('2024-12-02T00:14:00'), temperature: 59.8 },
59
+ * { timestamp: new Date('2024-12-02T00:15:00'), temperature: 58.6 },
60
+ * { timestamp: new Date('2024-12-02T00:16:00'), temperature: 57.4 },
61
+ * { timestamp: new Date('2024-12-02T00:17:00'), temperature: 56.2 },
62
+ * { timestamp: new Date('2024-12-02T00:18:00'), temperature: 55.7 },
63
+ * { timestamp: new Date('2024-12-02T00:19:00'), temperature: 54.5 },
64
+ * { timestamp: new Date('2024-12-02T00:20:00'), temperature: 53.2 },
65
+ * { timestamp: new Date('2024-12-02T00:21:00'), temperature: 52.8 },
66
+ * { timestamp: new Date('2024-12-02T00:22:00'), temperature: 51.9 },
67
+ * { timestamp: new Date('2024-12-02T00:23:00'), temperature: 50.5 },
68
+ * { timestamp: new Date('2024-12-02T00:24:00'), temperature: 49.8 },
69
+ * { timestamp: new Date('2024-12-02T00:25:00'), temperature: 48.7 },
70
+ * { timestamp: new Date('2024-12-02T00:26:00'), temperature: 47.5 },
71
+ * { timestamp: new Date('2024-12-02T00:27:00'), temperature: 46.3 },
72
+ * { timestamp: new Date('2024-12-02T00:28:00'), temperature: 45.9 },
73
+ * { timestamp: new Date('2024-12-02T00:29:00'), temperature: 45.0 }
74
+ * ];
75
+ *
76
+ * // Create an AVL tree to store CPU temperature data
77
+ * const cpuTemperatureTree = new AVLTree<Date, number, Datum>(cpuData, {
78
+ * toEntryFn: ({ timestamp, temperature }) => [timestamp, temperature]
79
+ * });
80
+ *
81
+ * // Query a specific time range (e.g., from 00:05 to 00:15)
82
+ * const rangeStart = new Date('2024-12-02T00:05:00');
83
+ * const rangeEnd = new Date('2024-12-02T00:15:00');
84
+ * const rangeResults = cpuTemperatureTree.rangeSearch([rangeStart, rangeEnd], node => ({
85
+ * minute: node ? node.key.getMinutes() : 0,
86
+ * temperature: cpuTemperatureTree.get(node ? node.key : undefined)
87
+ * }));
88
+ *
89
+ * console.log(rangeResults); // [
90
+ * // { minute: 5, temperature: 59.4 },
91
+ * // { minute: 6, temperature: 60.1 },
92
+ * // { minute: 7, temperature: 61.3 },
93
+ * // { minute: 8, temperature: 62 },
94
+ * // { minute: 9, temperature: 63.5 },
95
+ * // { minute: 10, temperature: 64 },
96
+ * // { minute: 11, temperature: 62.8 },
97
+ * // { minute: 12, temperature: 61.5 },
98
+ * // { minute: 13, temperature: 60.2 },
99
+ * // { minute: 14, temperature: 59.8 },
100
+ * // { minute: 15, temperature: 58.6 }
101
+ * // ]
38
102
  */
39
103
  export declare class AVLTree<K = any, V = any, R = object, MK = any, MV = any, MR = object> extends BST<K, V, R, MK, MV, MR> implements IBinaryTree<K, V, R, MK, MV, MR> {
40
104
  /**
@@ -53,6 +53,70 @@ exports.AVLTreeNode = AVLTreeNode;
53
53
  * 5. Efficient Lookups: Offers O(log n) search time, where 'n' is the number of nodes, due to its balanced nature.
54
54
  * 6. Complex Insertions and Deletions: Due to rebalancing, these operations are more complex than in a regular BST.
55
55
  * 7. Path Length: The path length from the root to any leaf is longer compared to an unbalanced BST, but shorter than a linear chain of nodes.
56
+ * @example
57
+ * // Find elements in a range
58
+ * // In interval queries, AVL trees, with their strictly balanced structure and lower height, offer better query efficiency, making them ideal for frequent and high-performance interval queries. In contrast, Red-Black trees, with lower update costs, are more suitable for scenarios involving frequent insertions and deletions where the requirements for interval queries are less demanding.
59
+ * type Datum = { timestamp: Date; temperature: number };
60
+ * // Fixed dataset of CPU temperature readings
61
+ * const cpuData: Datum[] = [
62
+ * { timestamp: new Date('2024-12-02T00:00:00'), temperature: 55.1 },
63
+ * { timestamp: new Date('2024-12-02T00:01:00'), temperature: 56.3 },
64
+ * { timestamp: new Date('2024-12-02T00:02:00'), temperature: 54.8 },
65
+ * { timestamp: new Date('2024-12-02T00:03:00'), temperature: 57.2 },
66
+ * { timestamp: new Date('2024-12-02T00:04:00'), temperature: 58.0 },
67
+ * { timestamp: new Date('2024-12-02T00:05:00'), temperature: 59.4 },
68
+ * { timestamp: new Date('2024-12-02T00:06:00'), temperature: 60.1 },
69
+ * { timestamp: new Date('2024-12-02T00:07:00'), temperature: 61.3 },
70
+ * { timestamp: new Date('2024-12-02T00:08:00'), temperature: 62.0 },
71
+ * { timestamp: new Date('2024-12-02T00:09:00'), temperature: 63.5 },
72
+ * { timestamp: new Date('2024-12-02T00:10:00'), temperature: 64.0 },
73
+ * { timestamp: new Date('2024-12-02T00:11:00'), temperature: 62.8 },
74
+ * { timestamp: new Date('2024-12-02T00:12:00'), temperature: 61.5 },
75
+ * { timestamp: new Date('2024-12-02T00:13:00'), temperature: 60.2 },
76
+ * { timestamp: new Date('2024-12-02T00:14:00'), temperature: 59.8 },
77
+ * { timestamp: new Date('2024-12-02T00:15:00'), temperature: 58.6 },
78
+ * { timestamp: new Date('2024-12-02T00:16:00'), temperature: 57.4 },
79
+ * { timestamp: new Date('2024-12-02T00:17:00'), temperature: 56.2 },
80
+ * { timestamp: new Date('2024-12-02T00:18:00'), temperature: 55.7 },
81
+ * { timestamp: new Date('2024-12-02T00:19:00'), temperature: 54.5 },
82
+ * { timestamp: new Date('2024-12-02T00:20:00'), temperature: 53.2 },
83
+ * { timestamp: new Date('2024-12-02T00:21:00'), temperature: 52.8 },
84
+ * { timestamp: new Date('2024-12-02T00:22:00'), temperature: 51.9 },
85
+ * { timestamp: new Date('2024-12-02T00:23:00'), temperature: 50.5 },
86
+ * { timestamp: new Date('2024-12-02T00:24:00'), temperature: 49.8 },
87
+ * { timestamp: new Date('2024-12-02T00:25:00'), temperature: 48.7 },
88
+ * { timestamp: new Date('2024-12-02T00:26:00'), temperature: 47.5 },
89
+ * { timestamp: new Date('2024-12-02T00:27:00'), temperature: 46.3 },
90
+ * { timestamp: new Date('2024-12-02T00:28:00'), temperature: 45.9 },
91
+ * { timestamp: new Date('2024-12-02T00:29:00'), temperature: 45.0 }
92
+ * ];
93
+ *
94
+ * // Create an AVL tree to store CPU temperature data
95
+ * const cpuTemperatureTree = new AVLTree<Date, number, Datum>(cpuData, {
96
+ * toEntryFn: ({ timestamp, temperature }) => [timestamp, temperature]
97
+ * });
98
+ *
99
+ * // Query a specific time range (e.g., from 00:05 to 00:15)
100
+ * const rangeStart = new Date('2024-12-02T00:05:00');
101
+ * const rangeEnd = new Date('2024-12-02T00:15:00');
102
+ * const rangeResults = cpuTemperatureTree.rangeSearch([rangeStart, rangeEnd], node => ({
103
+ * minute: node ? node.key.getMinutes() : 0,
104
+ * temperature: cpuTemperatureTree.get(node ? node.key : undefined)
105
+ * }));
106
+ *
107
+ * console.log(rangeResults); // [
108
+ * // { minute: 5, temperature: 59.4 },
109
+ * // { minute: 6, temperature: 60.1 },
110
+ * // { minute: 7, temperature: 61.3 },
111
+ * // { minute: 8, temperature: 62 },
112
+ * // { minute: 9, temperature: 63.5 },
113
+ * // { minute: 10, temperature: 64 },
114
+ * // { minute: 11, temperature: 62.8 },
115
+ * // { minute: 12, temperature: 61.5 },
116
+ * // { minute: 13, temperature: 60.2 },
117
+ * // { minute: 14, temperature: 59.8 },
118
+ * // { minute: 15, temperature: 58.6 }
119
+ * // ]
56
120
  */
57
121
  class AVLTree extends bst_1.BST {
58
122
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"avl-tree.js","sourceRoot":"","sources":["../../../../src/data-structures/binary-tree/avl-tree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"avl-tree.js","sourceRoot":"","sources":["../../../../src/data-structures/binary-tree/avl-tree.ts"],"names":[],"mappings":"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"}
@@ -50,6 +50,68 @@ export declare class BinaryTreeNode<K = any, V = any> {
50
50
  * 3. Depth and Height: Depth is the number of edges from the root to a node; height is the maximum depth in the tree.
51
51
  * 4. Subtrees: Each child of a node forms the root of a subtree.
52
52
  * 5. Leaf Nodes: Nodes without children are leaves.
53
+ * @example
54
+ * // determine loan approval using a decision tree
55
+ * // Decision tree structure
56
+ * const loanDecisionTree = new BinaryTree<string>(
57
+ * ['stableIncome', 'goodCredit', 'Rejected', 'Approved', 'Rejected'],
58
+ * { isDuplicate: true }
59
+ * );
60
+ *
61
+ * function determineLoanApproval(
62
+ * node?: BinaryTreeNode<string> | null,
63
+ * conditions?: { [key: string]: boolean }
64
+ * ): string {
65
+ * if (!node) throw new Error('Invalid node');
66
+ *
67
+ * // If it's a leaf node, return the decision result
68
+ * if (!node.left && !node.right) return node.key;
69
+ *
70
+ * // Check if a valid condition exists for the current node's key
71
+ * return conditions?.[node.key]
72
+ * ? determineLoanApproval(node.left, conditions)
73
+ * : determineLoanApproval(node.right, conditions);
74
+ * }
75
+ *
76
+ * // Test case 1: Stable income and good credit score
77
+ * console.log(determineLoanApproval(loanDecisionTree.root, { stableIncome: true, goodCredit: true })); // 'Approved'
78
+ *
79
+ * // Test case 2: Stable income but poor credit score
80
+ * console.log(determineLoanApproval(loanDecisionTree.root, { stableIncome: true, goodCredit: false })); // 'Rejected'
81
+ *
82
+ * // Test case 3: No stable income
83
+ * console.log(determineLoanApproval(loanDecisionTree.root, { stableIncome: false, goodCredit: true })); // 'Rejected'
84
+ *
85
+ * // Test case 4: No stable income and poor credit score
86
+ * console.log(determineLoanApproval(loanDecisionTree.root, { stableIncome: false, goodCredit: false })); // 'Rejected'
87
+ * @example
88
+ * // evaluate the arithmetic expression represented by the binary tree
89
+ * const expressionTree = new BinaryTree<number | string>(['+', 3, '*', null, null, 5, '-', null, null, 2, 8]);
90
+ *
91
+ * function evaluate(node?: BinaryTreeNode<number | string> | null): number {
92
+ * if (!node) return 0;
93
+ *
94
+ * if (typeof node.key === 'number') return node.key;
95
+ *
96
+ * const leftValue = evaluate(node.left); // Evaluate the left subtree
97
+ * const rightValue = evaluate(node.right); // Evaluate the right subtree
98
+ *
99
+ * // Perform the operation based on the current node's operator
100
+ * switch (node.key) {
101
+ * case '+':
102
+ * return leftValue + rightValue;
103
+ * case '-':
104
+ * return leftValue - rightValue;
105
+ * case '*':
106
+ * return leftValue * rightValue;
107
+ * case '/':
108
+ * return rightValue !== 0 ? leftValue / rightValue : 0; // Handle division by zero
109
+ * default:
110
+ * throw new Error(`Unsupported operator: ${node.key}`);
111
+ * }
112
+ * }
113
+ *
114
+ * console.log(evaluate(expressionTree.root)); // -27
53
115
  */
54
116
  export declare class BinaryTree<K = any, V = any, R = object, MK = any, MV = any, MR = object> extends IterableEntryBase<K, V | undefined> implements IBinaryTree<K, V, R, MK, MV, MR> {
55
117
  iterationType: IterationType;
@@ -92,6 +92,68 @@ exports.BinaryTreeNode = BinaryTreeNode;
92
92
  * 3. Depth and Height: Depth is the number of edges from the root to a node; height is the maximum depth in the tree.
93
93
  * 4. Subtrees: Each child of a node forms the root of a subtree.
94
94
  * 5. Leaf Nodes: Nodes without children are leaves.
95
+ * @example
96
+ * // determine loan approval using a decision tree
97
+ * // Decision tree structure
98
+ * const loanDecisionTree = new BinaryTree<string>(
99
+ * ['stableIncome', 'goodCredit', 'Rejected', 'Approved', 'Rejected'],
100
+ * { isDuplicate: true }
101
+ * );
102
+ *
103
+ * function determineLoanApproval(
104
+ * node?: BinaryTreeNode<string> | null,
105
+ * conditions?: { [key: string]: boolean }
106
+ * ): string {
107
+ * if (!node) throw new Error('Invalid node');
108
+ *
109
+ * // If it's a leaf node, return the decision result
110
+ * if (!node.left && !node.right) return node.key;
111
+ *
112
+ * // Check if a valid condition exists for the current node's key
113
+ * return conditions?.[node.key]
114
+ * ? determineLoanApproval(node.left, conditions)
115
+ * : determineLoanApproval(node.right, conditions);
116
+ * }
117
+ *
118
+ * // Test case 1: Stable income and good credit score
119
+ * console.log(determineLoanApproval(loanDecisionTree.root, { stableIncome: true, goodCredit: true })); // 'Approved'
120
+ *
121
+ * // Test case 2: Stable income but poor credit score
122
+ * console.log(determineLoanApproval(loanDecisionTree.root, { stableIncome: true, goodCredit: false })); // 'Rejected'
123
+ *
124
+ * // Test case 3: No stable income
125
+ * console.log(determineLoanApproval(loanDecisionTree.root, { stableIncome: false, goodCredit: true })); // 'Rejected'
126
+ *
127
+ * // Test case 4: No stable income and poor credit score
128
+ * console.log(determineLoanApproval(loanDecisionTree.root, { stableIncome: false, goodCredit: false })); // 'Rejected'
129
+ * @example
130
+ * // evaluate the arithmetic expression represented by the binary tree
131
+ * const expressionTree = new BinaryTree<number | string>(['+', 3, '*', null, null, 5, '-', null, null, 2, 8]);
132
+ *
133
+ * function evaluate(node?: BinaryTreeNode<number | string> | null): number {
134
+ * if (!node) return 0;
135
+ *
136
+ * if (typeof node.key === 'number') return node.key;
137
+ *
138
+ * const leftValue = evaluate(node.left); // Evaluate the left subtree
139
+ * const rightValue = evaluate(node.right); // Evaluate the right subtree
140
+ *
141
+ * // Perform the operation based on the current node's operator
142
+ * switch (node.key) {
143
+ * case '+':
144
+ * return leftValue + rightValue;
145
+ * case '-':
146
+ * return leftValue - rightValue;
147
+ * case '*':
148
+ * return leftValue * rightValue;
149
+ * case '/':
150
+ * return rightValue !== 0 ? leftValue / rightValue : 0; // Handle division by zero
151
+ * default:
152
+ * throw new Error(`Unsupported operator: ${node.key}`);
153
+ * }
154
+ * }
155
+ *
156
+ * console.log(evaluate(expressionTree.root)); // -27
95
157
  */
96
158
  class BinaryTree extends base_1.IterableEntryBase {
97
159
  /**
@@ -389,7 +451,7 @@ class BinaryTree extends base_1.IterableEntryBase {
389
451
  }
390
452
  const queue = new queue_1.Queue([this._root]);
391
453
  let potentialParent; // Record the parent node of the potential insertion location
392
- while (queue.size > 0) {
454
+ while (queue.length > 0) {
393
455
  const cur = queue.shift();
394
456
  if (!cur)
395
457
  continue;
@@ -1213,7 +1275,7 @@ class BinaryTree extends base_1.IterableEntryBase {
1213
1275
  startNode
1214
1276
  ]);
1215
1277
  const dfs = (level) => {
1216
- if (queue.size === 0)
1278
+ if (queue.length === 0)
1217
1279
  return;
1218
1280
  const current = queue.shift();
1219
1281
  ans.push(callback(current));
@@ -1235,8 +1297,8 @@ class BinaryTree extends base_1.IterableEntryBase {
1235
1297
  }
1236
1298
  else {
1237
1299
  const queue = new queue_1.Queue([startNode]);
1238
- while (queue.size > 0) {
1239
- const levelSize = queue.size;
1300
+ while (queue.length > 0) {
1301
+ const levelSize = queue.length;
1240
1302
  for (let i = 0; i < levelSize; i++) {
1241
1303
  const current = queue.shift();
1242
1304
  ans.push(callback(current));
@@ -1296,7 +1358,7 @@ class BinaryTree extends base_1.IterableEntryBase {
1296
1358
  }
1297
1359
  else {
1298
1360
  const queue = new queue_1.Queue([startNode]);
1299
- while (queue.size > 0) {
1361
+ while (queue.length > 0) {
1300
1362
  const cur = queue.shift();
1301
1363
  if (this.isRealNode(cur)) {
1302
1364
  if (this.isLeaf(cur)) {