remove(word) {
if (!word.length) return;
let cur = this.root;
this.removeMatch(cur, word, 0)
}
removeMatch(node, word, index) {
if(this.search(word)) {
if (index === word.length) return false;
let c = word.charAt(index);
if (!node.next.has(c)) return;
let cur = node.next.get(c),
del;
del = this.removeMatch(cur, word, index + 1);
if (this.isEnd(cur) && index === word.length - 1) {
node.next.delete(c);
return false
} else if (cur.isWord && !del && index === word.length - 1) {
cur.isWord = false;
return true
} else if (!del && !cur.isWord && !this.hasKey(cur)) {
node.next.delete(c)
}
return true
}else{
console.log('word is undefined')
}
}
isEnd(node) {
return node.next.size === 0
}
hasKey(node) {
return node.next.size >= 1
}
琢磨了一个下午出来的半成品,trie的删除操作考虑的情况似乎有点多?除了最简单的直接删除一列,还有比如加入了panda、pan、pad删除panda只能删除da,删除pan只能改isWord,删除pad只删除d等等,目前只想到这些情况,还有其他的情况这个code明显不能适应,不知老师可否给出点改进的思路