Я пытаюсь реализовать эффективный с пространством три в C. Это моя структура:
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 элементов.То, что я хочу сделать, это:
struct node** children;
, а затем при добавлении узла, просто маллок пространство для узла и
children[(unsigned char)'c']
указывают на новый узел.Проблема в том, что если я сначала не использую маллок для детей, то, очевидно, я не могу ссылаться ни на один индекс, иначе это большая ошибка.
Итак, мой вопрос: как мне реализовать trie так, чтобы он только сохранял ненулевые указатели на своих потомков?