Search code examples
cstructinsertbinary-search-treeinorder

C Binary Search Tree insertion


typedef struct word {
    char *str;             
    int freq;             
    struct word *right;
    struct word *left;
    } Word;



Word *root = NULL;  //global

while(pCounter != NULL){
            if(root == NULL){
                Word *x = (Word *)malloc(sizeof(Word));
                x->str = (char*)malloc(strlen(pCounter->str)+1);
                //printf("%s", node->str);
                strcpy(x->str,pCounter->str);
                x->freq = pCounter->freq;
                x->left = NULL;
                x->right = NULL;
                root = x;
                }
                else {
                    Insert(pCounter, root);
                }
            pCounter = pCounter ->pNext;
        }


void * Insert(Word *node, Word *root)
        {
            printf("inserted%s\n", node->str);
            if(root==NULL)
            {
                Word *x = (Word *)malloc(sizeof(Word));
                x->str = (char*)malloc(strlen(node->str)+1);
                //printf("%s", node->str);
                strcpy(x->str,node->str);
                x->freq = node->freq;
                x->left = NULL;
                x->right = NULL;
                return x;
                //node = root;
            }
            else if (strcmp(node->str, root->str)==0){

                root -> freq = root->freq+1;
            }
            else if (strcmp(node->str, root->str)<1){

                root->left = Insert(node,root->left);
            }
            else {
                root->right = Insert(node, root->right);    
            }

            return node;


        }

void ordered(Word *n){
            //printf("ordered");
    if(n != NULL){
        ordered(n->left);
        printf("%-30s   %5d\n", n->str, n->freq);
        ordered(n->right);
            }   
        }

I'm trying to build a binary search tree to process a linked list into an ordered bst. I can get the output of root to show up correctly but not anything else. It spits out some garbage and i'm not sure why. I set up a printf statement and it shows that it is inserting actual strings. Am i doing something wrong? This isn't all the code but I think it's enough so people can understand what i'm doing. Suggestions?


Solution

  • return node; --> return root; As per BLUEPIXY's comment, this was the correct answer.– BLUEPIXY 2 mins ago