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

时间:2013-04-10 20:02:59

标签: c string search binary-tree binary-search-tree

我需要将字符串插入到二进制搜索树中,但每次运行我的insert函数都会更新所有节点,而不仅仅是相应的节点。 要求放置在二叉搜索树中的每个单词都具有为其分配的确切内存量(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

1 个答案:

答案 0 :(得分:1)

您的回答(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);