@@ -186,31 +186,6 @@ describe('AvlTree', () => {
186
186
expect ( tree . toString ( ) ) . toBe ( '6,8,9,18,21,22,43' ) ;
187
187
} ) ;
188
188
189
- it ( 'should keep balance after removal' , ( ) => {
190
- const tree = new AvlTree ( ) ;
191
-
192
- tree . insert ( 1 ) ;
193
- tree . insert ( 2 ) ;
194
- tree . insert ( 3 ) ;
195
- tree . insert ( 4 ) ;
196
- tree . insert ( 5 ) ;
197
- tree . insert ( 6 ) ;
198
- tree . insert ( 7 ) ;
199
- tree . insert ( 8 ) ;
200
- tree . insert ( 9 ) ;
201
-
202
- expect ( tree . toString ( ) ) . toBe ( '1,2,3,4,5,6,7,8,9' ) ;
203
- expect ( tree . root . height ) . toBe ( 3 ) ;
204
-
205
- tree . remove ( 8 ) ;
206
- tree . remove ( 9 ) ;
207
-
208
- expect ( tree . contains ( 8 ) ) . toBeFalsy ( ) ;
209
- expect ( tree . contains ( 9 ) ) . toBeFalsy ( ) ;
210
- expect ( tree . toString ( ) ) . toBe ( '1,2,3,4,5,6,7' ) ;
211
- expect ( tree . root . height ) . toBe ( 2 ) ;
212
- } ) ;
213
-
214
189
it ( 'should do left right rotation and keeping left right node safe' , ( ) => {
215
190
const tree = new AvlTree ( ) ;
216
191
@@ -255,13 +230,74 @@ describe('AvlTree', () => {
255
230
expect ( tree . root . height ) . toBe ( 3 ) ;
256
231
} ) ;
257
232
258
- it ( 'should throw an error when trying to remove the node' , ( ) => {
259
- const removeNodeAvlTree = ( ) => {
260
- const tree = new AvlTree ( ) ;
233
+ it ( 'should remove values from the tree with right-right rotation' , ( ) => {
234
+ const tree = new AvlTree ( ) ;
235
+
236
+ tree . insert ( 10 ) ;
237
+ tree . insert ( 20 ) ;
238
+ tree . insert ( 30 ) ;
239
+ tree . insert ( 40 ) ;
240
+
241
+ expect ( tree . toString ( ) ) . toBe ( '10,20,30,40' ) ;
242
+
243
+ tree . remove ( 10 ) ;
244
+
245
+ expect ( tree . toString ( ) ) . toBe ( '20,30,40' ) ;
246
+ expect ( tree . root . value ) . toBe ( 30 ) ;
247
+ expect ( tree . root . left . value ) . toBe ( 20 ) ;
248
+ expect ( tree . root . right . value ) . toBe ( 40 ) ;
249
+ expect ( tree . root . balanceFactor ) . toBe ( 0 ) ;
250
+ } ) ;
251
+
252
+ it ( 'should remove values from the tree with left-left rotation' , ( ) => {
253
+ const tree = new AvlTree ( ) ;
254
+
255
+ tree . insert ( 10 ) ;
256
+ tree . insert ( 20 ) ;
257
+ tree . insert ( 30 ) ;
258
+ tree . insert ( 5 ) ;
259
+
260
+ expect ( tree . toString ( ) ) . toBe ( '5,10,20,30' ) ;
261
+
262
+ tree . remove ( 30 ) ;
263
+
264
+ expect ( tree . toString ( ) ) . toBe ( '5,10,20' ) ;
265
+ expect ( tree . root . value ) . toBe ( 10 ) ;
266
+ expect ( tree . root . left . value ) . toBe ( 5 ) ;
267
+ expect ( tree . root . right . value ) . toBe ( 20 ) ;
268
+ expect ( tree . root . balanceFactor ) . toBe ( 0 ) ;
269
+ } ) ;
270
+
271
+ it ( 'should keep balance after removal' , ( ) => {
272
+ const tree = new AvlTree ( ) ;
273
+
274
+ tree . insert ( 1 ) ;
275
+ tree . insert ( 2 ) ;
276
+ tree . insert ( 3 ) ;
277
+ tree . insert ( 4 ) ;
278
+ tree . insert ( 5 ) ;
279
+ tree . insert ( 6 ) ;
280
+ tree . insert ( 7 ) ;
281
+ tree . insert ( 8 ) ;
282
+ tree . insert ( 9 ) ;
283
+
284
+ expect ( tree . toString ( ) ) . toBe ( '1,2,3,4,5,6,7,8,9' ) ;
285
+ expect ( tree . root . value ) . toBe ( 4 ) ;
286
+ expect ( tree . root . height ) . toBe ( 3 ) ;
287
+ expect ( tree . root . balanceFactor ) . toBe ( - 1 ) ;
288
+
289
+ tree . remove ( 8 ) ;
261
290
262
- tree . remove ( 1 ) ;
263
- } ;
291
+ expect ( tree . root . value ) . toBe ( 4 ) ;
292
+ expect ( tree . root . balanceFactor ) . toBe ( - 1 ) ;
293
+
294
+ tree . remove ( 9 ) ;
264
295
265
- expect ( removeNodeAvlTree ) . toThrowError ( ) ;
296
+ expect ( tree . contains ( 8 ) ) . toBeFalsy ( ) ;
297
+ expect ( tree . contains ( 9 ) ) . toBeFalsy ( ) ;
298
+ expect ( tree . toString ( ) ) . toBe ( '1,2,3,4,5,6,7' ) ;
299
+ expect ( tree . root . value ) . toBe ( 4 ) ;
300
+ expect ( tree . root . height ) . toBe ( 2 ) ;
301
+ expect ( tree . root . balanceFactor ) . toBe ( 0 ) ;
266
302
} ) ;
267
303
} ) ;
0 commit comments