Возникла ошибка в реализации Trie (Javascript) - PullRequest
0 голосов
/ 04 июня 2018

Я реализую функцию добавления алгоритма Trie, но он дает мне следующую ошибку:

Uncaught TypeError: узел не является конструктором

... в этой строке кода:

node.children[char_pos]=new Array(string[0], new node());

Пожалуйста, не могли бы вы рассказать мне, что происходит?

Я ценю любую помощь.

Это мой код:

var node = function(){

    this.children= new Array(26);
    this.last_char=false;
};

function add(word, node){

    char_pos=word.charCodeAt(0) - 'a'.charCodeAt(0);

    if(word.length==1){

        if(node.children[char_pos]==null){ 

            node.children[char_pos]=word[0];
            node.last_char=true;
            return;

        }else{
            return;
        };

    }else{

        if(node.children[char_pos]==null){ 
            node.children[char_pos]=new Array(word[0], new node());
        };
    };

    word=word.substring(1);
    add(word, node.children[char_pos][1]);
};

1 Ответ

0 голосов
/ 04 июня 2018

Сначала вы заявляете

var node // = ...

Затем

function add(word, node){

Который, я полагаю, вы будете вызывать с некоторым экземпляром узла, узла, а не вашего узла функция конструктора .

В вашей функции add идентификатор node разрешается в ваш параметр "node", конструктор с идентификатор отсюда недоступен.Если бы вы написали node = new node(), вы бы потеряли функцию узла, верно?

Стандарты поможет вам в этом, назвав ваш конструктор или класс с первой заглавной буквой как Node,и экземпляры Node, node, так что вы не перезаписываете свои идентификаторы.

На самом деле, вам действительно нужно выбрать идентификаторы, которые еще не используются , так как вы перезапишете их, исделать последние недоступными.

...