【发布时间】:2021-05-27 22:33:39
【问题描述】:
我正在开发一个Trie 数据结构,其中每个节点代表一个单词。所以单词st、stack、stackoverflow和overflow将被排列为
root
--st
---stack
-----stackoverflow
--overflow
我的 Trie 在内部使用 HashTable,因此所有节点查找都需要固定时间。以下是我想出的将一个项目插入到 trie 中的算法。
- 检查树中是否存在项目。如果存在则返回,否则转至第二步。
- 迭代
key中的每个字符并检查单词是否存在。这样做直到我们得到一个可以将新值添加为子节点的节点。如果没有找到节点,则将其添加到根节点下。 - 插入后,重新排列新节点所在节点的兄弟节点。这将遍历所有兄弟节点并与新插入的节点进行比较。如果任何节点以与新节点相同的字符开头,它将从那里移动并添加为新节点的子节点。
我不确定这是实现 trie 的正确方法。欢迎提出任何建议或改进。
使用语言:C++
【问题讨论】:
-
@Vladimir:我的意思是
Trie不是Tree。我回滚了你的更改。 -
我在这个答案中有一个 Python trie 实现:stackoverflow.com/questions/55210/…
-
我有一个疑问,现在如果我想在建议框中检索或显示单词堆栈,trie 将如何区分堆栈和 stackoverflow?请帮忙。
标签: algorithm data-structures trie