我正在实现 Trie 算法的 add 函数,但它给了我以下错误:
未捕获类型错误:节点不是构造函数
...在此代码行中:
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]);
};
最佳答案
首先你声明
var node // = ...
然后
function add(word, node){
我想你会用节点的一些实例来调用,一个节点,而不是你的节点构造函数。
在您的函数添加中,标识符节点解析为您的参数“节点”,具有相同标识符的构造函数无法从这里。
你会写 node = new node()
你会失去节点功能吗?
标准通过用第一个大写字母命名构造函数或类(如 Node)以及 Node、node 的实例来帮助您解决此问题,这样您就不会覆盖您的标识符。
事实上,您确实应该选择尚未使用的标识符,因为您将覆盖它们,并使后者不可用。
关于javascript - Trie 实现中出现错误(Javascript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50671558/