【发布时间】:2014-11-12 06:41:27
【问题描述】:
我已经阅读了以下实现 trie 的实现。
typedef struct trie_node trie_node_t;
struct trie_node
{
int value;
trie_node_t *children[ALPHABET_SIZE];
};
// trie ADT
typedef struct trie trie_t;
struct trie
{
trie_node_t *root;
int count;
};
我不明白为什么有两个结构,而我们只能有一个带有指针数组和值类型的结构。请帮忙。!
【问题讨论】:
-
你当然可以这样做。 trie 的根通常具有下面展开的开头字母。您也可以只使用
trie_node并忽略该值。但是,自定义根节点可以让您有一个地方来存放 trie 范围内的好东西和可能有用的快捷方式(例如:count成员)。 -
@WhozCraig 你能解释一下上述声明吗?这就是我得到的。 trie_node 有值和 26 个指针(英文)。我希望我们可以计算出在该前缀之前形成了多少个单词。为什么要这样使用。!
-
仅给出声明,我无法明确说明
count的用途。由于root不是一个完整的字母大小的前缀节点指针数组,我只能想象count是该动态数组的动态计数。 (这是一个有点愚蠢的设计恕我直言,因为这个设计中唯一通过最小化不必要的指针来节省空间的节点似乎是根,它有一个,而不是一般的 trie 节点,其中有 N )。