Перво-наперво, дерево - это дерево.
В дереве все слова с заданным префиксом (скажем, ad
) фактически сохраняются в поддереве вашего дерева, к которому осуществляется доступ при поиске префикса ad
.
. Таким образом, чтобы напечатать всеСлова в вашем дереве, имеющие заданный префикс, выполняются в 2 этапа:
- Найти узел
node
, соответствующий вашему префиксу - Список всех слов в поддереве с корнем в
node
.
Вот псевдокод:
find_all_words_starting_with(string prefix, trieNode node, int depth){
if (depth == length(prefix)){
suffix = empty_string
print_all_words_with_prefix(prefix, suffix, node)
} else {
letter = prefix[depth]
if (node.hasChild(letter)){
find_all_words_starting_with(prefix, node.getChild(letter), depth+1)
} else { // no word with the correct prefix
return
}
}
}
print_all_words_with_prefix(prefix, suffix, node){
if (node.isCompleteWord){
print(prefix + suffix)
}
for each letter c in the alphabet {
if (node.hasChild(c)){
print_all_words_with_prefix(prefix, suffix + c, node.getChild(c))
}
}
}
find_all_words_starting_with
выполняет первую часть работы.Он находит узел, соответствующий префиксу, и вызывает вторую функцию print_all_words_with_prefix
, которая напечатает все полные слова в поддереве.