data-structure-typed 1.54.3 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/benchmark/report.html +26 -2
- package/benchmark/report.json +292 -42
- package/dist/cjs/data-structures/base/iterable-element-base.d.ts +14 -40
- package/dist/cjs/data-structures/base/iterable-element-base.js +14 -11
- package/dist/cjs/data-structures/base/iterable-element-base.js.map +1 -1
- package/dist/cjs/data-structures/base/linear-base.d.ts +277 -0
- package/dist/cjs/data-structures/base/linear-base.js +553 -0
- package/dist/cjs/data-structures/base/linear-base.js.map +1 -0
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +12 -8
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +50 -37
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +64 -0
- package/dist/cjs/data-structures/binary-tree/avl-tree.js +64 -0
- package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +62 -0
- package/dist/cjs/data-structures/binary-tree/binary-tree.js +67 -5
- package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/bst.d.ts +3 -3
- package/dist/cjs/data-structures/binary-tree/bst.js +14 -14
- package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/red-black-tree.d.ts +1 -7
- package/dist/cjs/data-structures/binary-tree/red-black-tree.js +1 -7
- package/dist/cjs/data-structures/binary-tree/red-black-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +175 -14
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +210 -40
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
- package/dist/cjs/data-structures/graph/abstract-graph.js +16 -16
- package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
- package/dist/cjs/data-structures/hash/hash-map.d.ts +46 -0
- package/dist/cjs/data-structures/hash/hash-map.js +46 -0
- package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
- package/dist/cjs/data-structures/heap/heap.d.ts +3 -11
- package/dist/cjs/data-structures/heap/heap.js +0 -10
- package/dist/cjs/data-structures/heap/heap.js.map +1 -1
- package/dist/cjs/data-structures/heap/max-heap.d.ts +2 -2
- package/dist/cjs/data-structures/heap/max-heap.js.map +1 -1
- package/dist/cjs/data-structures/heap/min-heap.d.ts +2 -2
- package/dist/cjs/data-structures/heap/min-heap.js.map +1 -1
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +65 -94
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +131 -146
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
- package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +145 -75
- package/dist/cjs/data-structures/linked-list/singly-linked-list.js +283 -169
- package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
- package/dist/cjs/data-structures/priority-queue/max-priority-queue.d.ts +2 -2
- package/dist/cjs/data-structures/priority-queue/max-priority-queue.js.map +1 -1
- package/dist/cjs/data-structures/priority-queue/min-priority-queue.d.ts +2 -2
- package/dist/cjs/data-structures/priority-queue/min-priority-queue.js.map +1 -1
- package/dist/cjs/data-structures/priority-queue/priority-queue.d.ts +2 -2
- package/dist/cjs/data-structures/priority-queue/priority-queue.js.map +1 -1
- package/dist/cjs/data-structures/queue/deque.d.ts +130 -91
- package/dist/cjs/data-structures/queue/deque.js +269 -169
- package/dist/cjs/data-structures/queue/deque.js.map +1 -1
- package/dist/cjs/data-structures/queue/queue.d.ts +131 -40
- package/dist/cjs/data-structures/queue/queue.js +181 -50
- package/dist/cjs/data-structures/queue/queue.js.map +1 -1
- package/dist/cjs/data-structures/stack/stack.d.ts +124 -11
- package/dist/cjs/data-structures/stack/stack.js +121 -10
- package/dist/cjs/data-structures/stack/stack.js.map +1 -1
- package/dist/cjs/data-structures/trie/trie.d.ts +4 -3
- package/dist/cjs/data-structures/trie/trie.js +3 -0
- package/dist/cjs/data-structures/trie/trie.js.map +1 -1
- package/dist/cjs/types/data-structures/base/base.d.ts +9 -4
- package/dist/cjs/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +1 -1
- package/dist/cjs/types/data-structures/binary-tree/tree-multi-map.d.ts +1 -1
- package/dist/cjs/types/data-structures/linked-list/doubly-linked-list.d.ts +2 -2
- package/dist/cjs/types/data-structures/linked-list/singly-linked-list.d.ts +2 -2
- package/dist/cjs/types/data-structures/queue/deque.d.ts +2 -3
- package/dist/cjs/types/data-structures/queue/queue.d.ts +2 -2
- package/dist/esm/data-structures/base/iterable-element-base.d.ts +14 -40
- package/dist/esm/data-structures/base/iterable-element-base.js +14 -11
- package/dist/esm/data-structures/base/iterable-element-base.js.map +1 -1
- package/dist/esm/data-structures/base/linear-base.d.ts +277 -0
- package/dist/esm/data-structures/base/linear-base.js +549 -0
- package/dist/esm/data-structures/base/linear-base.js.map +1 -0
- package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.d.ts +12 -8
- package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js +50 -36
- package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/avl-tree.d.ts +64 -0
- package/dist/esm/data-structures/binary-tree/avl-tree.js +64 -0
- package/dist/esm/data-structures/binary-tree/avl-tree.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/binary-tree.d.ts +62 -0
- package/dist/esm/data-structures/binary-tree/binary-tree.js +67 -5
- package/dist/esm/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/bst.d.ts +3 -3
- package/dist/esm/data-structures/binary-tree/bst.js +14 -12
- package/dist/esm/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/red-black-tree.d.ts +1 -7
- package/dist/esm/data-structures/binary-tree/red-black-tree.js +1 -7
- package/dist/esm/data-structures/binary-tree/red-black-tree.js.map +1 -1
- package/dist/esm/data-structures/binary-tree/tree-multi-map.d.ts +175 -14
- package/dist/esm/data-structures/binary-tree/tree-multi-map.js +210 -39
- package/dist/esm/data-structures/binary-tree/tree-multi-map.js.map +1 -1
- package/dist/esm/data-structures/graph/abstract-graph.js +16 -16
- package/dist/esm/data-structures/graph/abstract-graph.js.map +1 -1
- package/dist/esm/data-structures/hash/hash-map.d.ts +46 -0
- package/dist/esm/data-structures/hash/hash-map.js +46 -0
- package/dist/esm/data-structures/hash/hash-map.js.map +1 -1
- package/dist/esm/data-structures/heap/heap.d.ts +3 -11
- package/dist/esm/data-structures/heap/heap.js +0 -10
- package/dist/esm/data-structures/heap/heap.js.map +1 -1
- package/dist/esm/data-structures/heap/max-heap.d.ts +2 -2
- package/dist/esm/data-structures/heap/max-heap.js.map +1 -1
- package/dist/esm/data-structures/heap/min-heap.d.ts +2 -2
- package/dist/esm/data-structures/heap/min-heap.js.map +1 -1
- package/dist/esm/data-structures/linked-list/doubly-linked-list.d.ts +65 -94
- package/dist/esm/data-structures/linked-list/doubly-linked-list.js +132 -148
- package/dist/esm/data-structures/linked-list/doubly-linked-list.js.map +1 -1
- package/dist/esm/data-structures/linked-list/singly-linked-list.d.ts +145 -75
- package/dist/esm/data-structures/linked-list/singly-linked-list.js +283 -170
- package/dist/esm/data-structures/linked-list/singly-linked-list.js.map +1 -1
- package/dist/esm/data-structures/priority-queue/max-priority-queue.d.ts +2 -2
- package/dist/esm/data-structures/priority-queue/max-priority-queue.js.map +1 -1
- package/dist/esm/data-structures/priority-queue/min-priority-queue.d.ts +2 -2
- package/dist/esm/data-structures/priority-queue/min-priority-queue.js.map +1 -1
- package/dist/esm/data-structures/priority-queue/priority-queue.d.ts +2 -2
- package/dist/esm/data-structures/priority-queue/priority-queue.js.map +1 -1
- package/dist/esm/data-structures/queue/deque.d.ts +130 -91
- package/dist/esm/data-structures/queue/deque.js +269 -169
- package/dist/esm/data-structures/queue/deque.js.map +1 -1
- package/dist/esm/data-structures/queue/queue.d.ts +131 -40
- package/dist/esm/data-structures/queue/queue.js +182 -51
- package/dist/esm/data-structures/queue/queue.js.map +1 -1
- package/dist/esm/data-structures/stack/stack.d.ts +124 -11
- package/dist/esm/data-structures/stack/stack.js +121 -10
- package/dist/esm/data-structures/stack/stack.js.map +1 -1
- package/dist/esm/data-structures/trie/trie.d.ts +4 -3
- package/dist/esm/data-structures/trie/trie.js +3 -0
- package/dist/esm/data-structures/trie/trie.js.map +1 -1
- package/dist/esm/types/data-structures/base/base.d.ts +9 -4
- package/dist/esm/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +1 -1
- package/dist/esm/types/data-structures/binary-tree/tree-multi-map.d.ts +1 -1
- package/dist/esm/types/data-structures/linked-list/doubly-linked-list.d.ts +2 -2
- package/dist/esm/types/data-structures/linked-list/singly-linked-list.d.ts +2 -2
- package/dist/esm/types/data-structures/queue/deque.d.ts +2 -3
- package/dist/esm/types/data-structures/queue/queue.d.ts +2 -2
- package/dist/individuals/binary-tree/avl-tree-counter.mjs +4701 -0
- package/dist/individuals/binary-tree/avl-tree-multi-map.mjs +4514 -0
- package/dist/individuals/binary-tree/avl-tree.mjs +4321 -0
- package/dist/individuals/binary-tree/binary-tree.mjs +3097 -0
- package/dist/individuals/binary-tree/bst.mjs +3858 -0
- package/dist/individuals/binary-tree/red-black-tree.mjs +4391 -0
- package/dist/individuals/binary-tree/tree-counter.mjs +4806 -0
- package/dist/individuals/binary-tree/tree-multi-map.mjs +4582 -0
- package/dist/individuals/graph/directed-graph.mjs +2910 -0
- package/dist/individuals/graph/undirected-graph.mjs +2745 -0
- package/dist/individuals/hash/hash-map.mjs +1040 -0
- package/dist/individuals/heap/heap.mjs +909 -0
- package/dist/individuals/heap/max-heap.mjs +671 -0
- package/dist/individuals/heap/min-heap.mjs +659 -0
- package/dist/individuals/linked-list/doubly-linked-list.mjs +1495 -0
- package/dist/individuals/linked-list/singly-linked-list.mjs +1479 -0
- package/dist/individuals/priority-queue/max-priority-queue.mjs +768 -0
- package/dist/individuals/priority-queue/min-priority-queue.mjs +757 -0
- package/dist/individuals/priority-queue/priority-queue.mjs +670 -0
- package/dist/individuals/queue/deque.mjs +1262 -0
- package/dist/individuals/queue/queue.mjs +1865 -0
- package/dist/individuals/stack/stack.mjs +415 -0
- package/dist/individuals/trie/trie.mjs +687 -0
- package/dist/umd/data-structure-typed.js +1260 -649
- package/dist/umd/data-structure-typed.min.js +3 -3
- package/dist/umd/data-structure-typed.min.js.map +1 -1
- package/package.json +7 -7
- package/src/data-structures/base/iterable-element-base.ts +29 -20
- package/src/data-structures/base/linear-base.ts +649 -0
- package/src/data-structures/binary-tree/avl-tree-multi-map.ts +51 -36
- package/src/data-structures/binary-tree/avl-tree.ts +64 -0
- package/src/data-structures/binary-tree/binary-tree.ts +5 -5
- package/src/data-structures/binary-tree/bst.ts +9 -9
- package/src/data-structures/binary-tree/tree-multi-map.ts +214 -40
- package/src/data-structures/graph/abstract-graph.ts +16 -16
- package/src/data-structures/hash/hash-map.ts +46 -0
- package/src/data-structures/heap/heap.ts +3 -14
- package/src/data-structures/heap/max-heap.ts +2 -2
- package/src/data-structures/heap/min-heap.ts +2 -2
- package/src/data-structures/linked-list/doubly-linked-list.ts +144 -160
- package/src/data-structures/linked-list/singly-linked-list.ts +307 -185
- package/src/data-structures/priority-queue/max-priority-queue.ts +2 -5
- package/src/data-structures/priority-queue/min-priority-queue.ts +2 -5
- package/src/data-structures/priority-queue/priority-queue.ts +2 -2
- package/src/data-structures/queue/deque.ts +286 -183
- package/src/data-structures/queue/queue.ts +196 -63
- package/src/data-structures/stack/stack.ts +124 -18
- package/src/data-structures/trie/trie.ts +7 -3
- package/src/types/data-structures/base/base.ts +17 -8
- package/src/types/data-structures/binary-tree/avl-tree-multi-map.ts +1 -1
- package/src/types/data-structures/binary-tree/tree-multi-map.ts +1 -1
- package/src/types/data-structures/linked-list/doubly-linked-list.ts +2 -2
- package/src/types/data-structures/linked-list/singly-linked-list.ts +2 -2
- package/src/types/data-structures/queue/deque.ts +2 -3
- package/src/types/data-structures/queue/queue.ts +2 -2
- package/test/integration/all-in-one.test.ts +1 -1
- package/test/integration/avl-tree.test.ts +1 -1
- package/test/integration/bst.test.ts +2 -2
- package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +168 -0
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +15 -14
- package/test/unit/data-structures/binary-tree/red-black-tree.test.ts +1 -1
- package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +165 -7
- package/test/unit/data-structures/graph/directed-graph.test.ts +37 -37
- package/test/unit/data-structures/graph/undirected-graph.test.ts +2 -2
- package/test/unit/data-structures/hash/hash-map.test.ts +135 -0
- package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +135 -27
- package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +183 -12
- package/test/unit/data-structures/queue/deque.test.ts +241 -60
- package/test/unit/data-structures/queue/queue.test.ts +332 -19
- package/test/unit/data-structures/stack/stack.test.ts +165 -0
- package/test/unit/unrestricted-interconversion.test.ts +1 -1
|
@@ -73,6 +73,7 @@ export class AVLTreeMultiMap extends AVLTree {
|
|
|
73
73
|
specifyComparable: this._specifyComparable,
|
|
74
74
|
toEntryFn: this._toEntryFn,
|
|
75
75
|
isReverse: this._isReverse,
|
|
76
|
+
isMapMode: this._isMapMode,
|
|
76
77
|
...options
|
|
77
78
|
});
|
|
78
79
|
}
|
|
@@ -80,31 +81,34 @@ export class AVLTreeMultiMap extends AVLTree {
|
|
|
80
81
|
* Time Complexity: O(1)
|
|
81
82
|
* Space Complexity: O(1)
|
|
82
83
|
*
|
|
83
|
-
* The
|
|
84
|
-
* specified key and
|
|
85
|
-
* @param {K} key - The `key` parameter
|
|
86
|
-
*
|
|
87
|
-
* @
|
|
88
|
-
*
|
|
84
|
+
* The `createNode` function in TypeScript overrides the default implementation to create a new
|
|
85
|
+
* AVLTreeMultiMapNode with a specified key and value array.
|
|
86
|
+
* @param {K} key - The `key` parameter represents the key of the node being created in the
|
|
87
|
+
* AVLTreeMultiMap.
|
|
88
|
+
* @param {V[]} value - The `value` parameter in the `createNode` method represents an array of
|
|
89
|
+
* values associated with a specific key in the AVLTreeMultiMapNode. If no value is provided when
|
|
90
|
+
* calling the method, an empty array `[]` is used as the default value.
|
|
91
|
+
* @returns An AVLTreeMultiMapNode object is being returned, with the specified key and value. If the
|
|
92
|
+
* AVLTreeMultiMap is in map mode, an empty array is used as the value, otherwise the provided value
|
|
93
|
+
* array is used.
|
|
89
94
|
*/
|
|
90
|
-
createNode(key) {
|
|
91
|
-
return new AVLTreeMultiMapNode(key, []);
|
|
95
|
+
createNode(key, value = []) {
|
|
96
|
+
return new AVLTreeMultiMapNode(key, this._isMapMode ? [] : value);
|
|
92
97
|
}
|
|
93
98
|
/**
|
|
94
99
|
* Time Complexity: O(log n)
|
|
95
100
|
* Space Complexity: O(log n)
|
|
96
101
|
*
|
|
97
|
-
* The function `add` in TypeScript overrides the superclass method to add key-value pairs
|
|
98
|
-
*
|
|
99
|
-
* @param
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
* `values`
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
* addition operation was successful or not.
|
|
102
|
+
* The function `add` in this TypeScript code overrides the superclass method to add key-value pairs
|
|
103
|
+
* to an AVLTreeMultiMap, handling different input types and scenarios.
|
|
104
|
+
* @param [key] - The `key` parameter in the `override add` method represents the key of the entry to
|
|
105
|
+
* be added to the AVLTreeMultiMap. It can be of type `K`, which is the key type of the map. The key
|
|
106
|
+
* can be a single key value, a node of the AVLTree
|
|
107
|
+
* @param {V[]} [values] - The `values` parameter in the `add` method represents an array of values
|
|
108
|
+
* that you want to add to the AVLTreeMultiMap. It can contain one or more values associated with a
|
|
109
|
+
* specific key.
|
|
110
|
+
* @returns The `add` method is returning a boolean value, which indicates whether the operation was
|
|
111
|
+
* successful or not.
|
|
108
112
|
*/
|
|
109
113
|
add(keyNodeOrEntry, value) {
|
|
110
114
|
if (this.isRealNode(keyNodeOrEntry))
|
|
@@ -112,30 +116,40 @@ export class AVLTreeMultiMap extends AVLTree {
|
|
|
112
116
|
const _commonAdd = (key, values) => {
|
|
113
117
|
if (key === undefined || key === null)
|
|
114
118
|
return false;
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
existingValues.push(value);
|
|
119
|
-
return true;
|
|
120
|
-
}
|
|
121
|
-
const existingNode = this.getNode(key);
|
|
122
|
-
if (this.isRealNode(existingNode)) {
|
|
123
|
-
if (existingValues === undefined) {
|
|
124
|
-
super.add(key, values);
|
|
125
|
-
return true;
|
|
126
|
-
}
|
|
127
|
-
if (values !== undefined) {
|
|
119
|
+
const _addToValues = () => {
|
|
120
|
+
const existingValues = this.get(key);
|
|
121
|
+
if (existingValues !== undefined && values !== undefined) {
|
|
128
122
|
for (const value of values)
|
|
129
123
|
existingValues.push(value);
|
|
130
124
|
return true;
|
|
131
125
|
}
|
|
126
|
+
return false;
|
|
127
|
+
};
|
|
128
|
+
const _addByNode = () => {
|
|
129
|
+
const existingNode = this.getNode(key);
|
|
130
|
+
if (this.isRealNode(existingNode)) {
|
|
131
|
+
const existingValues = this.get(existingNode);
|
|
132
|
+
if (existingValues === undefined) {
|
|
133
|
+
super.add(key, values);
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
if (values !== undefined) {
|
|
137
|
+
for (const value of values)
|
|
138
|
+
existingValues.push(value);
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
132
145
|
else {
|
|
133
|
-
return
|
|
146
|
+
return super.add(key, values);
|
|
134
147
|
}
|
|
148
|
+
};
|
|
149
|
+
if (this._isMapMode) {
|
|
150
|
+
return _addByNode() || _addToValues();
|
|
135
151
|
}
|
|
136
|
-
|
|
137
|
-
return super.add(key, values);
|
|
138
|
-
}
|
|
152
|
+
return _addToValues() || _addByNode();
|
|
139
153
|
};
|
|
140
154
|
if (this.isEntry(keyNodeOrEntry)) {
|
|
141
155
|
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":"AAQA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGlD,MAAM,OAAO,mBAAsC,SAAQ,WAAmB;IACnE,MAAM,GAA+B,SAAS,CAAC;IAExD;;;;;;;;OAQG;IACH,YAAY,GAAM,EAAE,KAAU;QAC5B,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpB,CAAC;IAEQ,KAAK,GAAkD,SAAS,CAAC;IAE1E,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;IAEQ,MAAM,GAAkD,SAAS,CAAC;IAE3E,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;AAED;;GAEG;AACH,MAAM,OAAO,eACX,SAAQ,OAAgC;IAGxC;;;;;;;;;;OAUG;IACH,YACE,yBAEI,EAAE,EACN,OAA2C;QAE3C,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,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,EAAE;YAClD,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,iBAAiB,EAAE,IAAI,CAAC,kBAAkB;YAC1C,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;IAED
|
|
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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"}
|
|
@@ -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
|
/**
|
|
@@ -49,6 +49,70 @@ export class AVLTreeNode extends BSTNode {
|
|
|
49
49
|
* 5. Efficient Lookups: Offers O(log n) search time, where 'n' is the number of nodes, due to its balanced nature.
|
|
50
50
|
* 6. Complex Insertions and Deletions: Due to rebalancing, these operations are more complex than in a regular BST.
|
|
51
51
|
* 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.
|
|
52
|
+
* @example
|
|
53
|
+
* // Find elements in a range
|
|
54
|
+
* // 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.
|
|
55
|
+
* type Datum = { timestamp: Date; temperature: number };
|
|
56
|
+
* // Fixed dataset of CPU temperature readings
|
|
57
|
+
* const cpuData: Datum[] = [
|
|
58
|
+
* { timestamp: new Date('2024-12-02T00:00:00'), temperature: 55.1 },
|
|
59
|
+
* { timestamp: new Date('2024-12-02T00:01:00'), temperature: 56.3 },
|
|
60
|
+
* { timestamp: new Date('2024-12-02T00:02:00'), temperature: 54.8 },
|
|
61
|
+
* { timestamp: new Date('2024-12-02T00:03:00'), temperature: 57.2 },
|
|
62
|
+
* { timestamp: new Date('2024-12-02T00:04:00'), temperature: 58.0 },
|
|
63
|
+
* { timestamp: new Date('2024-12-02T00:05:00'), temperature: 59.4 },
|
|
64
|
+
* { timestamp: new Date('2024-12-02T00:06:00'), temperature: 60.1 },
|
|
65
|
+
* { timestamp: new Date('2024-12-02T00:07:00'), temperature: 61.3 },
|
|
66
|
+
* { timestamp: new Date('2024-12-02T00:08:00'), temperature: 62.0 },
|
|
67
|
+
* { timestamp: new Date('2024-12-02T00:09:00'), temperature: 63.5 },
|
|
68
|
+
* { timestamp: new Date('2024-12-02T00:10:00'), temperature: 64.0 },
|
|
69
|
+
* { timestamp: new Date('2024-12-02T00:11:00'), temperature: 62.8 },
|
|
70
|
+
* { timestamp: new Date('2024-12-02T00:12:00'), temperature: 61.5 },
|
|
71
|
+
* { timestamp: new Date('2024-12-02T00:13:00'), temperature: 60.2 },
|
|
72
|
+
* { timestamp: new Date('2024-12-02T00:14:00'), temperature: 59.8 },
|
|
73
|
+
* { timestamp: new Date('2024-12-02T00:15:00'), temperature: 58.6 },
|
|
74
|
+
* { timestamp: new Date('2024-12-02T00:16:00'), temperature: 57.4 },
|
|
75
|
+
* { timestamp: new Date('2024-12-02T00:17:00'), temperature: 56.2 },
|
|
76
|
+
* { timestamp: new Date('2024-12-02T00:18:00'), temperature: 55.7 },
|
|
77
|
+
* { timestamp: new Date('2024-12-02T00:19:00'), temperature: 54.5 },
|
|
78
|
+
* { timestamp: new Date('2024-12-02T00:20:00'), temperature: 53.2 },
|
|
79
|
+
* { timestamp: new Date('2024-12-02T00:21:00'), temperature: 52.8 },
|
|
80
|
+
* { timestamp: new Date('2024-12-02T00:22:00'), temperature: 51.9 },
|
|
81
|
+
* { timestamp: new Date('2024-12-02T00:23:00'), temperature: 50.5 },
|
|
82
|
+
* { timestamp: new Date('2024-12-02T00:24:00'), temperature: 49.8 },
|
|
83
|
+
* { timestamp: new Date('2024-12-02T00:25:00'), temperature: 48.7 },
|
|
84
|
+
* { timestamp: new Date('2024-12-02T00:26:00'), temperature: 47.5 },
|
|
85
|
+
* { timestamp: new Date('2024-12-02T00:27:00'), temperature: 46.3 },
|
|
86
|
+
* { timestamp: new Date('2024-12-02T00:28:00'), temperature: 45.9 },
|
|
87
|
+
* { timestamp: new Date('2024-12-02T00:29:00'), temperature: 45.0 }
|
|
88
|
+
* ];
|
|
89
|
+
*
|
|
90
|
+
* // Create an AVL tree to store CPU temperature data
|
|
91
|
+
* const cpuTemperatureTree = new AVLTree<Date, number, Datum>(cpuData, {
|
|
92
|
+
* toEntryFn: ({ timestamp, temperature }) => [timestamp, temperature]
|
|
93
|
+
* });
|
|
94
|
+
*
|
|
95
|
+
* // Query a specific time range (e.g., from 00:05 to 00:15)
|
|
96
|
+
* const rangeStart = new Date('2024-12-02T00:05:00');
|
|
97
|
+
* const rangeEnd = new Date('2024-12-02T00:15:00');
|
|
98
|
+
* const rangeResults = cpuTemperatureTree.rangeSearch([rangeStart, rangeEnd], node => ({
|
|
99
|
+
* minute: node ? node.key.getMinutes() : 0,
|
|
100
|
+
* temperature: cpuTemperatureTree.get(node ? node.key : undefined)
|
|
101
|
+
* }));
|
|
102
|
+
*
|
|
103
|
+
* console.log(rangeResults); // [
|
|
104
|
+
* // { minute: 5, temperature: 59.4 },
|
|
105
|
+
* // { minute: 6, temperature: 60.1 },
|
|
106
|
+
* // { minute: 7, temperature: 61.3 },
|
|
107
|
+
* // { minute: 8, temperature: 62 },
|
|
108
|
+
* // { minute: 9, temperature: 63.5 },
|
|
109
|
+
* // { minute: 10, temperature: 64 },
|
|
110
|
+
* // { minute: 11, temperature: 62.8 },
|
|
111
|
+
* // { minute: 12, temperature: 61.5 },
|
|
112
|
+
* // { minute: 13, temperature: 60.2 },
|
|
113
|
+
* // { minute: 14, temperature: 59.8 },
|
|
114
|
+
* // { minute: 15, temperature: 58.6 }
|
|
115
|
+
* // ]
|
|
52
116
|
*/
|
|
53
117
|
export class AVLTree extends BST {
|
|
54
118
|
/**
|
|
@@ -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;
|
|
@@ -90,6 +90,68 @@ export class BinaryTreeNode {
|
|
|
90
90
|
* 3. Depth and Height: Depth is the number of edges from the root to a node; height is the maximum depth in the tree.
|
|
91
91
|
* 4. Subtrees: Each child of a node forms the root of a subtree.
|
|
92
92
|
* 5. Leaf Nodes: Nodes without children are leaves.
|
|
93
|
+
* @example
|
|
94
|
+
* // determine loan approval using a decision tree
|
|
95
|
+
* // Decision tree structure
|
|
96
|
+
* const loanDecisionTree = new BinaryTree<string>(
|
|
97
|
+
* ['stableIncome', 'goodCredit', 'Rejected', 'Approved', 'Rejected'],
|
|
98
|
+
* { isDuplicate: true }
|
|
99
|
+
* );
|
|
100
|
+
*
|
|
101
|
+
* function determineLoanApproval(
|
|
102
|
+
* node?: BinaryTreeNode<string> | null,
|
|
103
|
+
* conditions?: { [key: string]: boolean }
|
|
104
|
+
* ): string {
|
|
105
|
+
* if (!node) throw new Error('Invalid node');
|
|
106
|
+
*
|
|
107
|
+
* // If it's a leaf node, return the decision result
|
|
108
|
+
* if (!node.left && !node.right) return node.key;
|
|
109
|
+
*
|
|
110
|
+
* // Check if a valid condition exists for the current node's key
|
|
111
|
+
* return conditions?.[node.key]
|
|
112
|
+
* ? determineLoanApproval(node.left, conditions)
|
|
113
|
+
* : determineLoanApproval(node.right, conditions);
|
|
114
|
+
* }
|
|
115
|
+
*
|
|
116
|
+
* // Test case 1: Stable income and good credit score
|
|
117
|
+
* console.log(determineLoanApproval(loanDecisionTree.root, { stableIncome: true, goodCredit: true })); // 'Approved'
|
|
118
|
+
*
|
|
119
|
+
* // Test case 2: Stable income but poor credit score
|
|
120
|
+
* console.log(determineLoanApproval(loanDecisionTree.root, { stableIncome: true, goodCredit: false })); // 'Rejected'
|
|
121
|
+
*
|
|
122
|
+
* // Test case 3: No stable income
|
|
123
|
+
* console.log(determineLoanApproval(loanDecisionTree.root, { stableIncome: false, goodCredit: true })); // 'Rejected'
|
|
124
|
+
*
|
|
125
|
+
* // Test case 4: No stable income and poor credit score
|
|
126
|
+
* console.log(determineLoanApproval(loanDecisionTree.root, { stableIncome: false, goodCredit: false })); // 'Rejected'
|
|
127
|
+
* @example
|
|
128
|
+
* // evaluate the arithmetic expression represented by the binary tree
|
|
129
|
+
* const expressionTree = new BinaryTree<number | string>(['+', 3, '*', null, null, 5, '-', null, null, 2, 8]);
|
|
130
|
+
*
|
|
131
|
+
* function evaluate(node?: BinaryTreeNode<number | string> | null): number {
|
|
132
|
+
* if (!node) return 0;
|
|
133
|
+
*
|
|
134
|
+
* if (typeof node.key === 'number') return node.key;
|
|
135
|
+
*
|
|
136
|
+
* const leftValue = evaluate(node.left); // Evaluate the left subtree
|
|
137
|
+
* const rightValue = evaluate(node.right); // Evaluate the right subtree
|
|
138
|
+
*
|
|
139
|
+
* // Perform the operation based on the current node's operator
|
|
140
|
+
* switch (node.key) {
|
|
141
|
+
* case '+':
|
|
142
|
+
* return leftValue + rightValue;
|
|
143
|
+
* case '-':
|
|
144
|
+
* return leftValue - rightValue;
|
|
145
|
+
* case '*':
|
|
146
|
+
* return leftValue * rightValue;
|
|
147
|
+
* case '/':
|
|
148
|
+
* return rightValue !== 0 ? leftValue / rightValue : 0; // Handle division by zero
|
|
149
|
+
* default:
|
|
150
|
+
* throw new Error(`Unsupported operator: ${node.key}`);
|
|
151
|
+
* }
|
|
152
|
+
* }
|
|
153
|
+
*
|
|
154
|
+
* console.log(evaluate(expressionTree.root)); // -27
|
|
93
155
|
*/
|
|
94
156
|
export class BinaryTree extends IterableEntryBase {
|
|
95
157
|
iterationType = 'ITERATIVE';
|
|
@@ -393,7 +455,7 @@ export class BinaryTree extends IterableEntryBase {
|
|
|
393
455
|
}
|
|
394
456
|
const queue = new Queue([this._root]);
|
|
395
457
|
let potentialParent; // Record the parent node of the potential insertion location
|
|
396
|
-
while (queue.
|
|
458
|
+
while (queue.length > 0) {
|
|
397
459
|
const cur = queue.shift();
|
|
398
460
|
if (!cur)
|
|
399
461
|
continue;
|
|
@@ -1216,7 +1278,7 @@ export class BinaryTree extends IterableEntryBase {
|
|
|
1216
1278
|
startNode
|
|
1217
1279
|
]);
|
|
1218
1280
|
const dfs = (level) => {
|
|
1219
|
-
if (queue.
|
|
1281
|
+
if (queue.length === 0)
|
|
1220
1282
|
return;
|
|
1221
1283
|
const current = queue.shift();
|
|
1222
1284
|
ans.push(callback(current));
|
|
@@ -1238,8 +1300,8 @@ export class BinaryTree extends IterableEntryBase {
|
|
|
1238
1300
|
}
|
|
1239
1301
|
else {
|
|
1240
1302
|
const queue = new Queue([startNode]);
|
|
1241
|
-
while (queue.
|
|
1242
|
-
const levelSize = queue.
|
|
1303
|
+
while (queue.length > 0) {
|
|
1304
|
+
const levelSize = queue.length;
|
|
1243
1305
|
for (let i = 0; i < levelSize; i++) {
|
|
1244
1306
|
const current = queue.shift();
|
|
1245
1307
|
ans.push(callback(current));
|
|
@@ -1299,7 +1361,7 @@ export class BinaryTree extends IterableEntryBase {
|
|
|
1299
1361
|
}
|
|
1300
1362
|
else {
|
|
1301
1363
|
const queue = new Queue([startNode]);
|
|
1302
|
-
while (queue.
|
|
1364
|
+
while (queue.length > 0) {
|
|
1303
1365
|
const cur = queue.shift();
|
|
1304
1366
|
if (this.isRealNode(cur)) {
|
|
1305
1367
|
if (this.isLeaf(cur)) {
|