Trie树

class TrieNode {
    constructor(data){
        this.data = data
        this.children = new Array(26)
        this.isEndingChar = false
        this.text = ''
    }
}

class TrieTree {
    constructor(){
        this.root = new TrieNode('/')
    }
    insert(text){
        let currentNode = this.root
        for(let char of text){
            let index = char.charCodeAt() - 'a'.charCodeAt()
            if(!currentNode.children[index]){
                currentNode.children[index] = new TrieNode(char)
            }
            currentNode = currentNode.children[index] 
        }
        currentNode.isEndingChar = true
        currentNode.text = text
    }
    find(text){
        let currentNode = this.root
        for(let char of text){
            let index = char.charCodeAt() - 'a'.charCodeAt()
            if(currentNode.children[index]){
                currentNode = currentNode.children[index]
            } else {
               return {
                input:text,
                result: false
               }
            }
        }
        return {
            input:currentNode.text,
            result:currentNode.isEndingChar
        }
    }
}

let tree = new TrieTree()
let strs = ["how", "hi", "her", "hello", "so", "see"];
for(let str of strs) {
    tree.insert(str);
}

for(let str of strs) {
    console.log(tree.find(str));
}

console.log(tree.find('world'));

posted @ 2019-05-05 16:05  pluscat  阅读(192)  评论(0编辑  收藏  举报