Троичное дерево поиска в C, указатель на указатель на задачу struct - PullRequest
0 голосов
/ 23 сентября 2011

Я пытаюсь построить троичное дерево поиска для школьного проекта. Насколько я могу судить, мой код выглядит хорошо.
Но листовые узлы исходной корневой функции не инициализируются, когда я использую 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;
                }

1 Ответ

1 голос
/ 23 сентября 2011

У вас есть:

while (n > strlen(word))

должно быть

while (n < strlen(word))
...