JSFiddle - React, Tailwind, and code Playground

by dhizzybusy

JavaScript

var node = {
  key: null,
  value: null,
  children: []
}

function Trie() {
  this.head = {
    key: '',
    children: {}
  }
}

Trie.prototype.add = function(key) {

  var curNode = this.head,
    newNode = null,
    curChar = key.slice(0, 1);

  key = key.slice(1);

  while (typeof curNode.children[curChar] !== "undefined" &&
    curChar.length > 0) {
    curNode = curNode.children[curChar];
    curChar = key.slice(0, 1);
    key = key.slice(1);
  }

  while (curChar.length > 0) {
    newNode = {
      key: curChar,
      value: key.length === 0 ? null : undefined,
      children: {}
    };

    curNode.children[curChar] = newNode;

    curNode = newNode;

    curChar = key.slice(0, 1);
    key = key.slice(1);
  }

};

Trie.prototype.search = function(key) {
  var curNode = this.head,
    curChar = key.slice(0, 1),
    d = 0;

  key = key.slice(1);

  while (typeof curNode.children[curChar] !== "undefined" && curChar.length > 0) {
    curNode = curNode.children[curChar];
    curChar = key.slice(0, 1);
    key = key.slice(1);
    d += 1;
  }

  if (curNode.value === null && key.length === 0) {
    return d;
  } else {
    return -1;
  }

}