@@ -83,6 +83,31 @@ class BinarySearchTree {
83
83
return false ;
84
84
}
85
85
86
+ delete ( root , value ) {
87
+ if ( root === null ) {
88
+ return root ;
89
+ }
90
+
91
+ if ( value > root . value ) {
92
+ // eslint-disable-next-line no-param-reassign
93
+ root . rightChild = this . delete ( root . rightChild , value ) ;
94
+ } else if ( value < root . value ) {
95
+ // eslint-disable-next-line no-param-reassign
96
+ root . leftChild = this . delete ( root . leftChild , value ) ;
97
+ } else {
98
+ // found the node
99
+ if ( root . leftChild === null ) {
100
+ // there is a right sub-tree
101
+ return root . rightChild ;
102
+ }
103
+ if ( root . rightChild === null ) {
104
+ // there is a left sub-tree
105
+ return root . leftChild ;
106
+ }
107
+ }
108
+ return root ;
109
+ }
110
+
86
111
isEmpty ( ) {
87
112
return this . root === null ;
88
113
}
@@ -108,29 +133,51 @@ class BinarySearchTree {
108
133
searchFor ( value ) {
109
134
return this . search ( this . root , value ) ;
110
135
}
136
+
137
+ remove ( value ) {
138
+ return this . delete ( this . root , value ) ;
139
+ }
111
140
}
112
141
113
- // const bst = new BinarySearchTree(6);
114
- // console.log(bst.root);
115
- // bst.add(4);
116
- // bst.add(9);
117
- // bst.add(2);
118
- // bst.add(5);
119
- // bst.add(8);
120
- // bst.add(12);
142
+ const bst = new BinarySearchTree ( 6 ) ;
143
+ console . log ( bst . root ) ;
144
+ bst . add ( 4 ) ;
145
+ bst . add ( 9 ) ;
146
+ bst . add ( 2 ) ;
147
+ bst . add ( 5 ) ;
148
+ bst . add ( 8 ) ;
149
+ bst . add ( 12 ) ;
150
+
151
+ console . log ( bst . root ) ;
152
+
153
+ const preorder = bst . traversePreorder ( ) ;
154
+ console . log ( 'Preorder Traversal - ' , preorder ) ;
155
+
156
+ const inorder = bst . traverseInorder ( ) ;
157
+ console . log ( 'Inorder Traversal - ' , inorder ) ;
158
+
159
+ const postorder = bst . traversePostorder ( ) ;
160
+ console . log ( 'Postorder Traversal - ' , postorder ) ;
161
+
162
+ const search = 18 ;
163
+ console . log ( `Search for ${ search } ` , bst . searchFor ( search ) ) ;
164
+
165
+ bst . remove ( 8 ) ;
166
+ console . log ( bst . traversePreorder ( ) ) ;
121
167
122
- // console.log(bst.root);
168
+ bst . remove ( 5 ) ;
169
+ console . log ( bst . traversePreorder ( ) ) ;
123
170
124
- // const preorder = bst.traversePreorder( );
125
- // console.log('Preorder Traversal - ', preorder );
171
+ bst . remove ( 4 ) ;
172
+ console . log ( bst . traversePreorder ( ) ) ;
126
173
127
- // const inorder = bst.traverseInorder( );
128
- // console.log('Inorder Traversal - ', inorder );
174
+ bst . remove ( 2 ) ;
175
+ console . log ( bst . traversePreorder ( ) ) ;
129
176
130
- // const postorder = bst.traversePostorder( );
131
- // console.log('Postorder Traversal - ', postorder );
177
+ bst . remove ( 9 ) ;
178
+ console . log ( bst . traversePreorder ( ) ) ;
132
179
133
- // const search = 18 ;
134
- // console.log(`Search for ${search}`, bst.searchFor(search ));
180
+ bst . remove ( 12 ) ;
181
+ console . log ( bst . traversePreorder ( ) ) ;
135
182
136
183
module . exports = BinarySearchTree ;
0 commit comments