@@ -165,4 +165,65 @@ describe('AvlTree', () => {
165
165
null, null, null, null, null, null]);
166
166
});
167
167
});
168
+
169
+ describe('balancing to the left', () => {
170
+ let n32;
171
+ beforeEach(() => {
172
+ n32 = tree.add(32);
173
+ tree.add(8);
174
+ tree.add(64);
175
+ tree.add(4);
176
+ tree.add(16);
177
+ tree.add(48);
178
+ tree.add(128);
179
+ tree.add(2);
180
+ tree.add(6);
181
+ tree.add(10);
182
+ tree.add(20);
183
+ });
184
+
185
+ it('should have all nodes', () => {
186
+ expect(tree.toArray()).toEqual([32, 8, 64, 4, 16, 48, 128, 2, 6, 10, 20,
187
+ null, null, null, null, null, null, null, null, null, null, null, null]);
188
+ });
189
+
190
+ it('should rebalance when removing', () => {
191
+ tree.remove(64);
192
+ expect(tree.toArray()).toEqual([32, 8, 128, 4, 16, 48, null, 2, 6, 10, 20,
193
+ null, null, null, null, null, null, null, null, null, null]);
194
+ expect(n32.balanceFactor).toBe(1);
195
+ expect(n32.right.balanceFactor).toBe(1);
196
+ expect(n32.left.balanceFactor).toBe(0);
197
+
198
+ tree.remove(48);
199
+ expect(tree.toArray()).toEqual([8, 4, 32, 2, 6, 16, 128, null, null, null, null, 10, 20,
200
+ null, null, null, null, null, null]);
201
+ });
202
+ });
203
+
204
+ describe('balancing to the right', () => {
205
+ beforeEach(() => {
206
+ tree.add(8);
207
+ tree.add(4);
208
+ tree.add(32);
209
+ tree.add(2);
210
+ tree.add(16);
211
+ tree.add(64);
212
+ tree.add(10);
213
+ tree.add(20);
214
+ tree.add(60);
215
+ tree.add(70);
216
+ });
217
+
218
+ it('should build the tree', () => {
219
+ expect(tree.toArray()).toEqual([8, 4, 32, 2, null, 16, 64, null, null, 10, 20, 60, 70,
220
+ null, null, null, null, null, null, null, null]);
221
+ });
222
+
223
+ it('should rebalance right side', () => {
224
+ tree.remove(2);
225
+ expect(tree.toArray()).toEqual([32, 8, 64, 4, 16, 60, 70, null, null, 10, 20,
226
+ null, null, null, null, null, null, null, null]);
227
+ });
228
+ });
168
229
});
0 commit comments