Skip to content

Commit 40b0658

Browse files
committed
Level Order Traversal for red black tree using queue.
1 parent 8369dca commit 40b0658

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

src/data-structures/red-black-tree.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,4 +266,34 @@
266266
}
267267
};
268268

269+
/**
270+
* Get Level Order Traversal for the given Red Black Tree,
271+
* returns 'Tree is empty' string when tree has no Nodes.
272+
* Complexity: O(N).
273+
*
274+
* @public
275+
* @return {String} The keys of the tree in level order traversal.
276+
*
277+
*/
278+
exports.RBTree.prototype.levelOrderTraversal = function () {
279+
var queue = [];
280+
var levelOrderString = '';
281+
if (this._root){
282+
queue.push(this._root);
283+
}else {
284+
levelOrderString = ' Tree is empty';
285+
}
286+
while (queue.length !== 0){
287+
var tempNode = queue.shift();
288+
levelOrderString += ' ' + tempNode.getKey();
289+
if (tempNode.getLeft() !== null){
290+
queue.push(tempNode.getLeft());
291+
}
292+
if (tempNode.getRight() !== null){
293+
queue.push(tempNode.getRight());
294+
}
295+
}
296+
return 'Level Order Traversal -:' + levelOrderString;
297+
};
298+
269299
})(typeof window === 'undefined' ? module.exports : window);

test/data-structures/red-black-tree.spec.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,20 @@ describe('RBTree', function () {
9797
});
9898
});
9999

100+
describe('levelOrderTraversal method', function () {
101+
it('should be able to traverse tree in level order', function () {
102+
var tree = new RBTree();
103+
expect(tree.levelOrderTraversal()).toBe('Level Order Traversal -: Tree is empty');
104+
tree.put(10);
105+
tree.put(20);
106+
expect(tree.levelOrderTraversal()).toBe('Level Order Traversal -: 20 10');
107+
tree.put(30);
108+
expect(tree.levelOrderTraversal()).toBe('Level Order Traversal -: 20 10 30');
109+
tree.put(45);
110+
expect(tree.levelOrderTraversal()).toBe('Level Order Traversal -: 20 10 45 30');
111+
tree.put(5);
112+
expect(tree.levelOrderTraversal()).toBe('Level Order Traversal -: 20 10 45 5 30');
113+
});
114+
});
115+
100116
});

0 commit comments

Comments
 (0)