Skip to content

Instantly share code, notes, and snippets.

@bflannery
Created January 26, 2019 14:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bflannery/bf7ab09e78b2929a02630fa3c56091ec to your computer and use it in GitHub Desktop.
Save bflannery/bf7ab09e78b2929a02630fa3c56091ec to your computer and use it in GitHub Desktop.
ES6 Binary Search Tree
class BST {
constructor(value) {
this.value = value;
this.left = null;
this.right = null;
}
insert(value) {
if (value <= this.value) {
if (!this.left) this.left = new BST(value);
else this.left.insert(value);
} else {
if (!this.right) this.right = new BST(value);
else this.right.insert(value);
}
}
contains(value) {
if (value === this.value) return true;
else if (value < this.value) {
if (!this.left) return false;
else return this.left.contains(value);
}
else {
if (!this.right) return false;
else return this.right.contains(value);
}
}
depthFirstTraversal(iteratorFunc, order) {
if (order === 'pre-order') iteratorFunc(this.value);
if (this.left) this.left.depthFirstTraversal(iteratorFunc, order)
if (order === 'in-order') iteratorFunc(this.value)
if (this.right) this.right.depthFirstTraversal(iteratorFunc, order)
if (order === 'post-order') iteratorFunc(this.value)
}
breadthFirstTraversal(iteratorFunc) {
var queue = [this];
while (queue.length) {
var treeNode = queue.shift();
iteratorFunc(treeNode);
if (treeNode.left) queue.push(treeNode.left);
if (treeNode.right) queue.push(treeNode.right);
}
}
getMinVal() {
if (this.left) return this.left.getMinVal();
else return this.value;
}
getMaxVal() {
if (this.right) return this.right.getMaxVal();
else return this.value;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment