@@ -186,31 +186,6 @@ describe('AvlTree', () => {
186186 expect ( tree . toString ( ) ) . toBe ( '6,8,9,18,21,22,43' ) ;
187187 } ) ;
188188
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-
214189 it ( 'should do left right rotation and keeping left right node safe' , ( ) => {
215190 const tree = new AvlTree ( ) ;
216191
@@ -255,13 +230,74 @@ describe('AvlTree', () => {
255230 expect ( tree . root . height ) . toBe ( 3 ) ;
256231 } ) ;
257232
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 ) ;
261290
262- tree . remove ( 1 ) ;
263- } ;
291+ expect ( tree . root . value ) . toBe ( 4 ) ;
292+ expect ( tree . root . balanceFactor ) . toBe ( - 1 ) ;
293+
294+ tree . remove ( 9 ) ;
264295
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 ) ;
266302 } ) ;
267303} ) ;
0 commit comments