开发者

Ternary Search Tree in C, Pointer to a Pointer to a struct problem

I'm trying to build a ternary search tree for a school project. As far as I can tell, my code looks okay.

But, the leaf nodes of the original root function are not being initialized when I use malloc. So every string comparison beyond the first one (whatever the root's string is) wind up empty (not null, but ""). I'm not passing any pointers as function arguments, so I can't figure out what the problem is. Please help!

I suspect the problem is somewhere in this part of the code. I really have racked my brain and searched and cannot figure out what my problem is.

More code is available if you want.

I have checked and root->right points to an entirely different location than current->right on the first pass. That's my real problem. I figure it must be an error in declaration or something, but I just can't figure it out.

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;
        n开发者_如何学JAVAode_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;
                }


You have:

while (n > strlen(word))

it should be

while (n < strlen(word))
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜