我需要将字符串插入到二进制搜索树中,但每次运行我的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
答案 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);