Trie Data结构中的遍历和打印密钥算法

时间:2014-02-15 07:43:56

标签: java data-structures

我正在开发一个处理Trie数据结构实现的项目。其中一个必需的方法是以dfs顺序打印Trie的所有键。每个节点都有一个布尔变量,表示它是否是一个终端节点,并且它的引用存储在其父节点大小为10的数组中。假设分支的一部分是3456(3-> 4-> 5-> 6),并且5和6是终端节点,6是分支的最后一个节点 - >就是在打印键时,我只需要为这个分支打印345和3456。但问题是我不确定如何使用递归来做这个...有什么想法吗?

顺便说一下,这些关键数字不需要在每个节点中存储为变量,只需通过数组中相应的索引引用它们(例如:3表示节点存储在子节点中[3])

1 个答案:

答案 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);
}

然而,您可能需要对其进行一些调整。