class BSTNode {
constructor(value) {
this.value = value;
this.right = null;
this.left = null;
this.count = 0;
}
}
class BST {
constructor() {
this.root = null;
}
create(value) {
const newNode = new BSTNode(value);
if (!this.root) {
this.root = newNode;
return this;
}
let current = this.root;
const addSide = side => {
if (!current[side]) {
current[side] = newNode;
return this;
}
current = current[side];
};
while (true) {
if (value === current.value) {
current.count++;
return this;
}
if (value < current.value) addSide('left');
else addSide('right');
}
}
find(value) {
if (!this.root) return undefined;
let current = this.root;
let found = false;
while (current && !found) {
if (value < current.value) current = current.left;
else if (value > current.value) current = current.right;
else found = true;
}
if (!found) return 'Oops! Nothing found!';
return current;
}
breadth_first_search() {
let visited_nodes = [],
queue = [],
current = this.root;
queue.push(current);
while (queue.length) {
current = queue.shift();
visited_nodes.push(current.value);
if (current.left) queue.push(current.left);
if (current.right) queue.push(current.right);
}
return visited_nodes;
}
preOrder() {
let visited_nodes = [],
current = this.root;
let traverse_the_tree = node => {
visited_nodes.push(node.value);
if (node.left) traverse_the_tree(node.left);
if (node.right) traverse_the_tree(node.right);
};
traverse_the_tree(current);
return visited_nodes;
}
postOrder() {
let visited_nodes = [],
current = this.root;
let traverse_the_tree = node => {
if (node.left) traverse_the_tree(node.left);
if (node.right) traverse_the_tree(node.right);
visited_nodes.push(node.value);
};
traverse_the_tree(current);
return visited_nodes;
}
inOrder() {
let visited_nodes = [],
current = this.root;
let traverse_the_tree = node => {
if (node.left) traverse_the_tree(node.left);
visited_nodes.push(node.value);
if (node.right) traverse_the_tree(node.right);
}
traverse_the_tree(current);
return visited_nodes;
}
}
let binary_search_tree = new BST();
binary_search_tree.create(100);
binary_search_tree.create(2);
binary_search_tree.create(21);
binary_search_tree.create(221);
binary_search_tree.create(3);
binary_search_tree.create(44);
document.getElementById("tree").innerHTML = `Breadth-first: ${binary_search_tree.breadth_first_search()}`;
document.getElementById("tree2").innerHTML = `PreOrder: ${binary_search_tree.preOrder()}`;
document.getElementById("tree3").innerHTML = `PostOrder: ${binary_search_tree.postOrder()}`;
document.getElementById("tree4").innerHTML = `InOrder: ${binary_search_tree.inOrder()}`;
<pre id="tree"></pre>
<pre id="tree2"></pre>
<pre id="tree3"></pre>
<pre id="tree4"></pre>
body {
background-color: #f9f9f9;
}
pre {
padding: 10px;
border-radius: 16px;
color: white;
font-size: 1.3em;
}
pre#tree {
background-color: #5ECC93;
}
pre#tree2 {
background-color: #190237;
}
pre#tree3 {
background-color: #191117;
}
pre#tree4 {
background-color: #199827;
}