C二进制搜索树插入

时间:2014-12-06 22:39:00

标签: c struct insert binary-search-tree inorder

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);
            }   
        }

我正在尝试构建二进制搜索树以将链表处理为有序的bst。我可以得到root的输出正确显示但不能显示任何其他内容。它吐了一些垃圾,我不知道为什么。我设置了一个printf语句,它表明它正在插入实际的字符串。难道我做错了什么?这不是所有代码,但我认为这足以让人们了解我在做什么。建议?

1 个答案:

答案 0 :(得分:0)

return node; - &GT; return root;根据BLUEPIXY的评论,这是正确答案.- BLUEPIXY 2分钟前