JSFiddle - React, Tailwind, and code Playground
by moeishaa
JavaScript
class Node {
constructor(data) {
this.data = data;
this.left = this.right = null;
}
}
class BinarySearchTree {
constructor() {
this.root = null;
}
insertNode(root, node) {
if (node.data < root.data) {
if (!root.left) {
root.left = node;
}
else {
this.insertNode(root.left, node);
}
}
else {
if (!root.right) {
root.right = node;
}
else {
this.insertNode(root.right, node);
}
}
}
insert(data) {
let node = new Node(data);
if (!this.root) {
this.root = node;
return;
}
this.insertNode(this.root, node);
}
getHeight(node) {
if (!node) return 0;
return Math.max(this.getHeight(node.left), this.getHeight(node.right)) + 1;
}
getMaxHeight() {
return this.getHeight(this.root);
}
inOrderTraverseNode(node, callback) {
if (!node) return;
this.inOrderTraverseNode(node.left, callback);
callback(node.data);
this.inOrderTraverseNode(node.right, callback);
}
inOrderTraverse(callback) {
this.inOrderTraverseNode(this.root, callback);
}
preOrderTraverseNode(node, callback) {
if (!node) return;
callback(node.data);
this.preOrderTraverseNode(node.left, callback);
this.preOrderTraverseNode(node.right, callback);
}
preOrderTraverse(callback) {
this.preOrderTraverseNode(this.root, callback);
}
postOrderTraverseNode(node, callback) {
if (!node) return;
this.postOrderTraverseNode(node.left, callback);
this.postOrderTraverseNode(node.right, callback);
callback(node.data);
}
postOrderTraverse(callback) {
this.postOrderTraverseNode(this.root, callback);
}
minNode(node) {
if (!node) return null;
if (!node.left) return node.data;
return this.minNode(node.left);
}
min() {
return this.minNode(this.root);
}
maxNode(node) {
if (!node) return null;
if (!node.right) return node.data;
return...