Skip to content

Commit e397c42

Browse files
committed
Added level order traversal
1 parent 82d98f1 commit e397c42

File tree

3 files changed

+38
-2
lines changed

3 files changed

+38
-2
lines changed

src/binary-search-tree/binary-search-tree.js

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { Queue } from '../queue/queue';
12
/**
23
* This creates a node
34
* @name BSTNode
@@ -38,6 +39,7 @@ export class BSTNode {
3839
const inOrderTraversal = Symbol('inorder');
3940
const preOrderTraversal = Symbol('preorder');
4041
const 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
}

src/binary-search-tree/binary-search-tree.spec.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,5 +155,9 @@ describe('Binary Search Tree', () => {
155155
it('should return postorder list', () => {
156156
expect(bst.traverse('postOrder')).toEqual([5, 4, 10, 8, 6, 17, 31, 49, 43, 19, 11]);
157157
});
158+
159+
it('should return bfs list', () => {
160+
expect(bst.traverse('levelOrder')).toEqual([11, 6, 19, 4, 8, 17, 43, 5, 10, 31, 49]);
161+
});
158162
});
159163
});

typings/data-structures.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
declare namespace DataStructures {
2-
interface BST {
2+
class BST {
33
insert(val: string | number, details?: object): void;
44
lookup(val: string | number): { hasValue: boolean, currentNode: BST, parentNode: BST };
55
traverse(type: string): Array<number | string> | Error;

0 commit comments

Comments
 (0)