Я пытаюсь построить троичное дерево поиска для школьного проекта. Насколько я могу судить, мой код выглядит хорошо.
Но листовые узлы исходной корневой функции не инициализируются, когда я использую malloc.
Таким образом, каждое сравнение строк, кроме первого (независимо от строки корня), оказывается пустым (не нулевым, а ""). Я не передаю указатели в качестве аргументов функции, поэтому не могу понять, в чем проблема. Пожалуйста, помогите!
Я подозреваю, что проблема где-то в этой части кода. Я действительно сломал свой мозг и искал и не могу понять, в чем моя проблема.
Больше кода доступно, если вы хотите.
Я проверил, и root-> right указывает на совершенно другое местоположение, чем current-> right на первом проходе. Это моя настоящая проблема. Я полагаю, что это может быть ошибка в объявлении или что-то в этом роде, но я просто не могу понять это.
node_t* buildTree(FILE *file)
{
// check for at least one input
// set this input as the root of the tree
// if there is no input, print error message and return
char start[MAX_TOKEN_LENGTH];
fscanf(file, "%s", start);
printf("Root: %s\n", start);
node_t *root = malloc(sizeof(node_t));
root->counter = 1;
root->depth = 0;
root->right = NULL;
root->middle = NULL;
root->left = NULL;
printf("Allocated.\n");
int n = 0;
while(n < strlen(start))
{
root->string[n] = start[n];
n++;
}
printf("Root stored as: %s\n", root->string);
char word[MAX_TOKEN_LENGTH];
while(fscanf(file, "%s", word) != EOF)
{
printf("Read a word: %s\n", word);
// Reset depth and sort location
// Start sorting from the root element
int depth = 0;
node_t *current = root;
// Continue sorting into the tree until a null node is encountered.
// Increment the depth each pass
while (current->string != NULL)
{
printf("Comparing %s with %s, result is %d\n", word, current->string, strcmp(word, current->string));
if ( ( word[0] == current->string[0] ) && ( strcmp (word, current->string) != 0 ) )
{
printf("Middle node\n");
if (current->middle == NULL)
{
printf("Middle node is empty; creating new leaf.\n");
current->middle = malloc(sizeof(node_t));
int n = 0;
while (n < strlen(word))
{
current->middle->string[n] = word[n];
n++;
}
current->middle->counter = 0;
current->middle->depth = ++depth;
current->middle->left = NULL;
current->middle->middle = NULL;
current->middle->right = NULL;
break;
}