我正在开发一个处理Trie数据结构实现的项目。其中一个必需的方法是以dfs顺序打印Trie的所有键。每个节点都有一个布尔变量,表示它是否是一个终端节点,并且它的引用存储在其父节点大小为10的数组中。假设分支的一部分是3456(3-> 4-> 5-> 6),并且5和6是终端节点,6是分支的最后一个节点 - >就是在打印键时,我只需要为这个分支打印345和3456。但问题是我不确定如何使用递归来做这个...有什么想法吗?
顺便说一下,这些关键数字不需要在每个节点中存储为变量,只需通过数组中相应的索引引用它们(例如:3表示节点存储在子节点中[3])
答案 0 :(得分:0)
尝试这样的事情:
private Node Find(Node x, String key, int d)
{ // Return value associated with key in the subtrie rooted at x.
if (x == null)
return null;
if (d == key.Length)
{
return x;
}
char c = key[d]; // Use dth key char to identify subtrie.
return Find(x.Children[c], key, d + 1);
}
public IEnumerable<String> GetAllKeys()
{
Queue<String> q = new Queue<String>();
Collect(Find(Root, "", 0), "", q);
return q;
}
private void Collect(Node x, String pre, Queue<String> q)
{
if (x == null) return;
if (x.NullNode) q.Enqueue(pre);
for (int c = 0; c < 256; c++)
Collect(x.Children[c], pre + ((char)c), q);
}
然而,您可能需要对其进行一些调整。