我正在尝试在 C 中实现空间高效的 trie。这是我的结构:
struct node {
char val; //character stored in node
int key; //key value if this character is an end of word
struct node* children[256];
};
当我添加一个节点时,它的索引是字符的无符号字符转换。例如,如果我想添加“c”,那么
children[(unsigned char)'c']
是指向新添加节点的指针。然而,这个实现需要我声明一个包含 256 个元素的 node* 数组。我想做的是:
struct node** children;
然后在添加节点时,只需为节点分配空间并拥有
children[(unsigned char)'c']
指向新节点。问题是如果我不首先为孩子分配空间,那么我显然不能引用任何索引,否则这是一个很大的错误。
所以我的问题是:我如何实现一个 trie,使其只存储指向其子级的非空指针?