@@ -17,25 +17,25 @@ class BinaryTree {
17
17
this . root = new Node ( info , null , null ) ;
18
18
return ;
19
19
} else {
20
- const searchTree = function ( node ) {
20
+ const createTree = function ( node ) {
21
21
if ( info < node . info ) {
22
22
if ( node . left === null ) {
23
23
node . left = new Node ( info , null , null ) ;
24
24
return ;
25
25
} else if ( node . left !== null ) {
26
- return searchTree ( node . left ) ;
26
+ return createTree ( node . left ) ;
27
27
}
28
28
} else if ( info > node . info ) {
29
29
if ( node . right === null ) {
30
30
node . right = new Node ( info , null , null ) ;
31
31
} else if ( node . right !== null ) {
32
- return searchTree ( node . right ) ;
32
+ return createTree ( node . right ) ;
33
33
}
34
34
} else {
35
35
return null ;
36
36
}
37
37
} ;
38
- return searchTree ( node ) ;
38
+ return createTree ( node ) ;
39
39
}
40
40
}
41
41
@@ -57,15 +57,18 @@ class BinaryTree {
57
57
58
58
find ( info ) {
59
59
let currentNode = this . root ;
60
+ let parentNode = this . root ;
60
61
while ( currentNode . info !== info ) {
61
62
if ( info > currentNode . info ) {
63
+ parentNode = currentNode ;
62
64
currentNode = currentNode . right ;
63
65
} else {
66
+ parentNode = currentNode ;
64
67
currentNode = currentNode . left ;
65
68
}
66
69
if ( currentNode === null ) return null ;
67
70
}
68
- return currentNode ;
71
+ return { currentNode, parentNode } ;
69
72
}
70
73
71
74
isPresent ( info ) {
@@ -88,15 +91,19 @@ class BinaryTree {
88
91
return null ;
89
92
}
90
93
if ( info === node . info ) {
94
+ // if the deleted node has no left child and right child
91
95
if ( node . left === null && node . right === null ) {
92
96
return null ;
93
97
}
98
+ // if the deleted node has no left child
94
99
if ( node . left === null ) {
95
100
return node . right ;
96
101
}
102
+ // if the deleted node has no right child
97
103
if ( node . right === null ) {
98
104
return node . left ;
99
105
}
106
+ // if the deleted node has both left and right child
100
107
let tempNode = node . right ;
101
108
while ( tempNode . left !== null ) {
102
109
template = tempNode . left ;
@@ -165,6 +172,26 @@ class BinaryTree {
165
172
return visit ( node ) ;
166
173
}
167
174
}
175
+
176
+ leftRotate ( info ) {
177
+ let node = this . find ( info ) ? this . find ( info ) . currentNode : null ;
178
+ let rightNode = node ? node . right : null ;
179
+ if ( rightNode !== null ) {
180
+ // Copy the info
181
+ let info = node . info ;
182
+ node . info = rightNode . info ;
183
+ rightNode . info = info ;
184
+
185
+ // left rotation
186
+ node . right = rightNode . right ;
187
+ rightNode . right = rightNode . left ;
188
+ rightNode . left = node . left ;
189
+ node . left = rightNode ;
190
+ return this . leftRotate ( rightNode . info ) ;
191
+ }
192
+ }
193
+
194
+ rightRotate ( info ) { }
168
195
}
169
196
170
197
const bst1 = new BinaryTree ( ) ;
@@ -175,9 +202,7 @@ bst1.add(11);
175
202
bst1 . add ( - 2 ) ;
176
203
bst1 . add ( 8 ) ;
177
204
bst1 . add ( 21 ) ;
178
- bst1 . remove ( 21 ) ;
179
- console . log ( bst1 ) ;
180
- console . log ( "Root node: " , bst1 . root ) ;
181
- console . log ( "pre order traversal: " , bst1 . preOrderTraversal ( ) ) ;
182
- console . log ( "in order traversal: " , bst1 . inOrderTraversal ( ) ) ;
183
- console . log ( "post order traversal: " , bst1 . postOrderTraversal ( ) ) ;
205
+ console . log ( bst1 . root ) ;
206
+ console . log ( bst1 . leftRotate ( 20 ) ) ;
207
+ console . log ( bst1 . root ) ;
208
+ console . log ( bst1 . find ( 21 ) ) ;
0 commit comments