【发布时间】:2013-03-12 14:27:21
【问题描述】:
我需要为 trie 实现一个迭代器。假设我有
a
/\
b c
/\
d e
如果当前的iterator.state="abd",我想有iterator.next.state="abe",然后是"ac"。在每个级别,节点按字典顺序排序(例如,在级别 2,c 位于 b 之后)。这也应该在 log(n) 时间内发生,其中 n 是节点数。
我能想到的一个解决方案是:考虑一种特殊情况,即每个分支具有相同的高度。我认为一个相当酷的实现是为每个“级别”维护一个平衡的树。在询问:“abd 之后是什么字符串”时,当定位在 b 上时,可以在与第三级关联的树中搜索大于“b”的第一个元素,给出“abe”。
但这可能不切实际,因为必须创建树。
【问题讨论】:
-
@NickVeys homework - “此标签已过时,正在被删除。请不要将此标签添加到问题中。”
-
你是如何实现每个 trie 节点的?通常一个级别中的节点已经排序,因为每个节点只是一个指向下一个节点的数组,每个数组都有你的字母大小。