@@ -175,14 +175,78 @@ export class BinarySearchTree {
175
175
// Recursive case
176
176
return this . breathFirstSearchRecursive ( queue , list )
177
177
}
178
+
179
+ DFSInorder ( ) {
180
+ return this . traverseInOrder ( this . root , [ ] )
181
+ }
182
+
183
+ DFSPreorder ( ) {
184
+ return this . traversePreOrder ( this . root , [ ] )
185
+ }
186
+ DFSPostorder ( ) {
187
+ return this . traversePostOrder ( this . root , [ ] )
188
+ }
189
+
190
+ // 9
191
+ // 4 20
192
+ //1 6 15 170
193
+ // InOrder - Left -> Root -> Right: [1, 4, 6, 9, 15, 20, 170]
194
+ traverseInOrder ( node : any , list : number [ ] ) { // Đều sử dụng cấu trúc dữ liệu stack. Function nào gọi sau -> thì thực hiện trước!
195
+
196
+ console . log ( node . value ) ;
197
+ console . log ( list ) ;
198
+ // Recursive case:
199
+ if ( node . left ) {
200
+ this . traverseInOrder ( node . left , list )
201
+ }
202
+ list . push ( node . value )
203
+ if ( node . right ) {
204
+ this . traverseInOrder ( node . right , list )
205
+ }
206
+ // Base case ?
207
+ return list
208
+ }
209
+
210
+ // PreOrder - Root -> Left -> Right: [9, 4, 1, 6, 20, 15, 170]
211
+ traversePreOrder ( node : any , list : number [ ] ) { // Đều sử dụng cấu trúc dữ liệu stack. Function nào gọi sau -> thì thực hiện trước!
212
+ console . log ( node . value ) ;
213
+ console . log ( list ) ;
214
+ list . push ( node . value )
215
+ // Recursive case:
216
+ if ( node . left ) {
217
+ this . traversePreOrder ( node . left , list )
218
+ }
219
+ if ( node . right ) {
220
+ this . traversePreOrder ( node . right , list )
221
+ }
222
+
223
+ // Base case ?
224
+ return list
225
+ }
226
+
227
+ traversePostOrder ( node : any , list : number [ ] ) { // Đều sử dụng cấu trúc dữ liệu stack. Function nào gọi sau -> thì thực hiện trước!
228
+ console . log ( node . value ) ;
229
+ console . log ( list ) ;
230
+ // Recursive case:
231
+ if ( node . left ) {
232
+ this . traversePostOrder ( node . left , list )
233
+ }
234
+ if ( node . right ) {
235
+ this . traversePostOrder ( node . right , list )
236
+ }
237
+ list . push ( node . value )
238
+ // Base case ?
239
+ return list // Space complexity -> O(h) h: là chiều cao của cây nhị phân
240
+ }
241
+
178
242
}
179
243
180
244
// 9
181
245
// 4 20
182
246
//1 6 15 170
183
247
// InOrder - Left -> Root -> Right: [1, 4, 6, 9, 15, 20, 170]
184
248
// PreOrder - Root -> Left -> Right: [9, 4, 1, 6, 20, 15, 170]
185
- // PostOrder - Left -> Right -> Root: [9, 15 , 6, 20, 170, 1, 4 ]
249
+ // PostOrder - Left -> Right -> Root: [1, 4 , 6, 9, 15, 20, 170 ]
186
250
187
251
const tree = new BinarySearchTree ( ) ;
188
252
tree . insert ( 9 ) ;
@@ -192,11 +256,14 @@ tree.insert(20);
192
256
tree . insert ( 170 ) ;
193
257
tree . insert ( 15 ) ;
194
258
tree . insert ( 1 ) ;
195
- tree . remove ( 170 ) ;
259
+ // tree.remove(170);
196
260
// JSON.stringify(traverse(tree.root));
197
261
// console.log(tree.lookup(20));
198
- console . log ( tree . breathFirstSearch ( ) ) ;
199
- console . log ( tree . breathFirstSearchRecursive ( [ tree . root ] , [ ] ) ) ;
262
+ // console.log(tree.breathFirstSearch());
263
+ // console.log(tree.breathFirstSearchRecursive([tree.root], []));
264
+ // console.log(tree.DFSInorder());
265
+ // console.log(tree.DFSPreorder());
266
+ console . log ( tree . DFSPostorder ( ) ) ;
200
267
function traverse ( node : Node | null ) {
201
268
if ( ! node ) return null
202
269
const tree : Node | null = { value : node . value , left : null , right : null } ;
0 commit comments