File tree Expand file tree Collapse file tree 2 files changed +29
-4
lines changed Expand file tree Collapse file tree 2 files changed +29
-4
lines changed Original file line number Diff line number Diff line change 110
110
// y should be child of z with larger height
111
111
// (cannot be ancestor of removed node)
112
112
var y ;
113
- if ( z . _left !== null && z . _right !== null ) {
114
- y = ( z . _left === y ) ? z . _right : z . _left ;
115
- } else if ( z . _left !== null && z . _right === null ) {
113
+ if ( ( z . _left !== null && z . _right !== null ) || ( z . _left !== null && z . _right === null ) ) {
116
114
y = z . _left ;
117
115
} else if ( z . _right !== null && z . _left === null ) {
118
116
y = z . _right ;
602
600
var temp = node . value ;
603
601
node . value = min . value ;
604
602
min . value = temp ;
605
- return this . remove ( min ) ;
603
+ return this . remove ( temp ) ;
606
604
} else {
607
605
if ( node . _left ) {
608
606
this . _replaceChild ( node . _parent , node , node . _left ) ;
Original file line number Diff line number Diff line change @@ -163,4 +163,31 @@ describe('AVL Tree', function () {
163
163
expect ( avlTree . _root . _right . value ) . toBe ( 25 ) ;
164
164
expect ( avlTree . _root . _right . _height ) . toBe ( 1 ) ;
165
165
} ) ;
166
+ it ( 'should remove nodes and balance properly (3)' , function ( ) {
167
+ var avlTree = new AVLTree ( ) ;
168
+ avlTree . insert ( 55 ) ;
169
+ avlTree . insert ( 25 ) ;
170
+ avlTree . insert ( 11 ) ;
171
+ avlTree . insert ( 1 ) ;
172
+ avlTree . remove ( 55 ) ;
173
+ avlTree . insert ( 32 ) ;
174
+ avlTree . insert ( 37 ) ;
175
+ avlTree . insert ( 41 ) ;
176
+ avlTree . insert ( 8 ) ;
177
+ avlTree . insert ( 44 ) ;
178
+ avlTree . insert ( 6 ) ;
179
+ avlTree . remove ( 32 ) ;
180
+ avlTree . remove ( 11 ) ;
181
+ avlTree . remove ( 25 ) ;
182
+
183
+ // depth 1
184
+ expect ( avlTree . _root . value ) . toBe ( 37 ) ;
185
+ expect ( avlTree . _root . _height ) . toBe ( 4 ) ;
186
+ // depth 2
187
+ expect ( avlTree . _root . _left . value ) . toBe ( 6 ) ;
188
+ expect ( avlTree . _root . _left . _height ) . toBe ( 3 ) ;
189
+
190
+ expect ( avlTree . _root . _right . value ) . toBe ( 41 ) ;
191
+ expect ( avlTree . _root . _right . _height ) . toBe ( 2 ) ;
192
+ } ) ;
166
193
} ) ;
You can’t perform that action at this time.
0 commit comments