Я пытаюсь реализовать Trie в Javascript, что достаточно просто, но я, кажется, столкнулся с дорожным блоком с моим объектом.
Узлы структурированы следующим образом:
var node = {
children: []
}
Children - это массив узлов, который отображается буквой в строке.Таким образом, строка «Test» будет выглядеть следующим образом:
root = {
children: [
't' => {
children: [
'e' => {
children: [
's' => {
children: [
't' => {
children: []
}
]
}
]
}
]
}
]
};
Таким образом, каждый дочерний массив должен иметь длину 1, но если сделать что-то вроде alert(this._root.children.length);
, я получу ноль.Любые мысли о том, почему это происходит?
Вот остальная часть моей реализации:
function Trie() {
this._root = {
children: []
};
}
Trie.prototype = {
//restore constructor
constructor: Trie,
add: function (str){
var curr = this._root,
prev,
currchar;
// For each character in the string
for(var i = 0, j = str.length; i < j; i++) {
// Insert only lowercase letters for efficiency
currchar = str.toLowerCase().charAt(i);
prev = curr;
curr = prev.children[currchar];
// Traverse until we hit a non-existant node
if(typeof(curr) == "undefined") {
// Make a new node
prev.children[currchar] = {
children: []
};
curr = prev.children[currchar];
}
}
}