javascript - 使用 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;
}
}
解决方案
推荐阅读
- python - 找一个常用的python类
- c# - 什么是trick程序呢?
- javascript - 反应 setState 钩子更新一个先前的值
- plotly-python - Plotly - 图形对象 - 使用下拉菜单时的不同颜色
- mocha.js - webdriverio v5 + mocha 中的缓慢加载 qa 环境超时
- python - CUML 拟合函数抛出 cp.full TypeError
- responsive - 如何在移动设备中制作响应式视图并将滚动条仅添加到笔记本电脑
- c++ - 指向对象和析构函数的指针
- python - 如何使用 copy_expert 将数据加载到列名中具有特殊字符的 postgresql 表中?
- reactjs - 如何读取 TextInput 中的值?