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...