繁体   English   中英

将字符串插入二进制搜索树C

[英]Inserting a string into a Binary Search Tree C

我需要将字符串插入二叉搜索树,但是通过插入函数运行的每个字符串都会更新所有节点,而不仅仅是适当的节点。 它要求放置在二进制搜索树中的每个单词都有为其分配的确切内存量(NULL指针为+1)。

这是使用的结构:

typedef struct node_t{
   char *word;
   struct node_t *left, *right;
} node_t;

这是我传递单词的方式:

for(i=0; i< original_words -1; i++)
{
    fscanf(ifp, "%s", y);
    head = insert(head, y);
}

这是我的插入函数:

node_t *insert(struct node_t *head, char *word)
{

if(strcmp(head->word, word) > 0)
{

    if(head->left == NULL)
    {
        head->left = create_node(word);
    }
    else
    {
        head->left = insert(head->left, word);
    }
}

else
{
    if(head->right == NULL)
    {
        head->right = create_node(word);
    }
    else
    {
        head->right = insert(head->right, word);
    }
}

return head;

}

编辑:这是输入文件的示例。

4
-------
bravo
-------
alpha
-------
gamma
-------
delta

您的答案( insert函数)假定在第一次调用时已经定义了head ,它应该从以下行开始:

if (head == null) return create_node(word);

这也将使您无需使用代码中的空行。 我不知道这问题,但它是一个。

也许更重要: create_node如何设置word 如果是这样的话:

 new_node->word = word

然后,您要做的就是创建指向从文件中拉出的单词的指针的集合。 每次从文件中读取单词很可能会将单词读入同一块内存,因此您要做的就是收集一个指向内存中同一位置的指针树。 应该是这样的:

 new_node->word = malloc(strlen(word)+1);
 if (new_note->word == null) {FAIL MEMORY LOSS}
 strcpy(new_node->word, word);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM