Trie树 - Go语言中文社区

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'));
版权声明:本文来源博客园,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://www.cnblogs.com/pluslius/p/10813557.html
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2019-11-17 17:25:13
  • 阅读 ( 1055 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

推荐文章

猜你喜欢