1
function TrieNode(key) {7
this.getWord = function () {11
while (node !== null) {12
output.unshift(node.key);16
return output.join("");21
this.root = new TrieNode(null);23
this.insert = function (word) {26
for (let i = 0; i < word.length; i++) {27
if (!node.children[word[i]]) {28
node.children[word[i]] = new TrieNode(word[i]);29
node.children[word[i]].parent = node;32
node = node.children[word[i]];34
if (i === word.length - 1) {40
this.findAllWords = function (node, arr) {42
arr.unshift(node.getWord());45
for (let child in node.children) {46
this.findAllWords(node.children[child], arr);50
this.find = function (prefix) {54
for (let i = 0; i < prefix.length; i++) {55
if (node.children[prefix[i]]) {56
node = node.children[prefix[i]];62
this.findAllWords(node, output);66
return output.slice(0, 3);69
this.search = function (word) {73
for (let i = 0; i < word.length; i++) {74
output.push(this.find(word.substring(0, i + 1)));82
* @param {string[]} products83
* @param {string} searchWord84
* @return {string[][]}86
var suggestedProducts = function (products, searchWord) {87
let trie = new Trie();89
for (let product of products) {93
return trie.search(searchWord);