1+ import { Queue } from '../queue/queue' ;
12/**
23 * This creates a node
34 * @name BSTNode
@@ -38,6 +39,7 @@ export class BSTNode {
3839const inOrderTraversal = Symbol ( 'inorder' ) ;
3940const preOrderTraversal = Symbol ( 'preorder' ) ;
4041const postOrderTraversal = Symbol ( 'postorder' ) ;
42+ const levelOrderTraversal = Symbol ( 'levelorder' ) ;
4143
4244/**
4345 * Private properties name
@@ -179,7 +181,7 @@ export class BST {
179181
180182 /**
181183 * Print the values of the BST in specific order
182- * @param {string } type - value of type can be inOrder, preOrder, postOrder
184+ * @param {string } type - value of type can be inOrder, preOrder, postOrder, levelOrder
183185 */
184186 traverse ( type ) {
185187 let retVal ;
@@ -193,6 +195,9 @@ export class BST {
193195 case 'postOrder' :
194196 retVal = this [ postOrderTraversal ] ( ) ;
195197 break ;
198+ case 'levelOrder' :
199+ retVal = this [ levelOrderTraversal ] ( ) ;
200+ break ;
196201 default :
197202 retVal = new Error ( 'Type should be one of inOrder, preOrder or postOrder' ) ;
198203 break ;
@@ -252,4 +257,31 @@ export class BST {
252257 recurseTraversal ( subtree ) ;
253258 return traversalList ;
254259 }
260+
261+ /**
262+ * Levelorder traversal - BFS
263+ */
264+ [ levelOrderTraversal ] ( ) {
265+ const bfsTraversalList = [ ] ;
266+ const traversalQueue = new Queue ;
267+
268+ if ( this . root !== null ) {
269+ traversalQueue . enqueue ( this . root ) ;
270+ }
271+
272+ while ( ! traversalQueue . isEmpty ( ) ) {
273+ let presentNode = traversalQueue . top ( ) ;
274+ if ( presentNode . left ) {
275+ traversalQueue . enqueue ( presentNode . left ) ;
276+ }
277+ if ( presentNode . right ) {
278+ traversalQueue . enqueue ( presentNode . right ) ;
279+ }
280+ bfsTraversalList . push ( presentNode . key ) ;
281+
282+ traversalQueue . dequeue ( ) ;
283+ }
284+
285+ return bfsTraversalList ;
286+ }
255287}
0 commit comments