首页 > 解决方案 > 使用 trie 时 add 不是函数

问题描述

我使用与来自 github 的 trie.js 完全相同,并且正在实现 add 函数,但它作为 trie.add 不是函数的错误出现。有什么办法可以解决这个问题 吗

 var long = function(words) {
        let trie = new Trie();
        trie.add("demo");
        console.log(trie);
    };


lonf('demo1');

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;
    }

}

Trie.prototype.remove = function(key) {
    var d = this.search(key);
    if (d > -1){
        removeH(this.head, key, d);
    }
}

function removeH(node, key, depth) {
    if (depth === 0 && Object.keys(node.children).length === 0){
        return true;
    } 

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

    if (removeH(node.children[curChar], key.slice(1), depth-1)) {
        delete node.children[curChar];
        if (Object.keys(node.children).length === 0) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}

标签: javascript

解决方案


推荐阅读