@@ -14,38 +14,10 @@ const AvlTreeNode = require('./avlTreeNode');
14
14
class AvlTree extends BinarySearchTree {
15
15
/**
16
16
* @private
17
- * applies the proper rotation on nodes after inserting a node
17
+ * applies the proper rotation on nodes after an insert or remove
18
18
* @param {AvlTreeNode } node
19
19
*/
20
- balanceAfterInsert ( key , node ) {
21
- if ( ! node ) return ;
22
-
23
- node . updateHeight ( ) ;
24
- const balance = node . calculateBalance ( ) ;
25
- if ( balance > 1 ) {
26
- if ( key < node . getLeft ( ) . getKey ( ) ) {
27
- node . rotateRight ( ) ;
28
- } else {
29
- node . rotateLeftRight ( ) ;
30
- }
31
- } else if ( balance < - 1 ) {
32
- if ( key > node . getRight ( ) . getKey ( ) ) {
33
- node . rotateLeft ( ) ;
34
- } else {
35
- node . rotateRightLeft ( ) ;
36
- }
37
- }
38
- if ( node === this . rootNode && ( balance < - 1 || balance > 1 ) ) {
39
- this . rootNode = node . getParent ( ) ;
40
- }
41
- }
42
-
43
- /**
44
- * @private
45
- * applies the proper rotation on nodes after removing a node
46
- * @param {AvlTreeNode } node
47
- */
48
- balanceAfterRemove ( node ) {
20
+ balanceNode ( node ) {
49
21
if ( ! node ) return ;
50
22
51
23
node . updateHeight ( ) ;
@@ -110,12 +82,12 @@ class AvlTree extends BinarySearchTree {
110
82
111
83
if ( key < node . getKey ( ) ) {
112
84
const newNode = this . insert ( key , value , node . getLeft ( ) ) ;
113
- this . balanceAfterInsert ( key , node ) ; // back-tracking
85
+ this . balanceNode ( node ) ; // back-tracking
114
86
return newNode ;
115
87
}
116
88
117
89
const newNode = this . insert ( key , value , node . getRight ( ) ) ;
118
- this . balanceAfterInsert ( key , node ) ; // back-tracking
90
+ this . balanceNode ( node ) ; // back-tracking
119
91
return newNode ;
120
92
}
121
93
@@ -124,13 +96,13 @@ class AvlTree extends BinarySearchTree {
124
96
125
97
if ( key < node . getKey ( ) ) {
126
98
const removed = this . remove ( key , node . getLeft ( ) ) ;
127
- this . balanceAfterRemove ( node ) ;
99
+ this . balanceNode ( node ) ;
128
100
return removed ;
129
101
}
130
102
131
103
if ( key > node . getKey ( ) ) {
132
104
const removed = this . remove ( key , node . getRight ( ) ) ;
133
- this . balanceAfterRemove ( node ) ;
105
+ this . balanceNode ( node ) ;
134
106
return removed ;
135
107
}
136
108
0 commit comments