C将结构插入到二叉搜索树中
我正在尝试遍历结构的链表,并将它们插入BST,这样我就可以按字母顺序通过顺序遍历输出字符串。然而,当我调用我的索引时,root总是空的,所以它不会遍历。我认为我的插入函数可能是错误的。我不确定我是否需要通过root并对其进行操作。有什么建议吗?您在该语句中有一个return语句,它返回0,即NULL。考虑您创建和停止转换malloc的内容,以及该创建的结果指针需要存储或返回到哪里。root=。。。不会更改调用方的指针。您需要通过指向指针的地址指针或函数的返回值返回更改。选择权在你。还有一个建议,仔细阅读你的笔记。如果此操作的目的确实是构建频率树,那么您可能不必复制字符串。相反,您可以简单地将地址存储在任何包含原始数据的链表节点中。这样做需要源列表节点与您构建的树一样长,但这将显著减少一半的分配数量,因为树中的字符指针只不过是指向列表中源字符串的原始和唯一副本的指针。@WhozCraig我实际上是在一个大文本文件中读取的,并用线程将其拆分。链接列表被每个线程重用。这就是我复制字符串的原因。构建BST的目的是让我能够以字母顺序存储所有字符串,并在最后输出。线程将给出它们各自的单词和单词计数。C将结构插入到二叉搜索树中,c,struct,binary-search-tree,C,Struct,Binary Search Tree,我正在尝试遍历结构的链表,并将它们插入BST,这样我就可以按字母顺序通过顺序遍历输出字符串。然而,当我调用我的索引时,root总是空的,所以它不会遍历。我认为我的插入函数可能是错误的。我不确定我是否需要通过root并对其进行操作。有什么建议吗?您在该语句中有一个return语句,它返回0,即NULL。考虑您创建和停止转换malloc的内容,以及该创建的结果指针需要存储或返回到哪里。root=。。。不会更改调用方的指针。您需要通过指向指针的地址指针或函数的返回值返回更改。选择权在你。还有一个建议,
typedef struct word {
char *str; /* Stores the word */
int freq; /* Stores the frequency */
struct word *right;
struct word *left;
} Word;
Word *root = NULL; //global variable
void * Insert(Word *node,Word *root)
{
//printf("inserted");
if(root==NULL)
{
root = (Word *)malloc(sizeof(Word));
root->str = (char*)malloc(strlen(node->str)+1);
//printf("%s", node->str);
strcpy(root->str,node->str);
root->freq = node->freq;
root->left = NULL;
root->right = NULL;
}
else if (strcmp(node->str, root->str)==0){
root -> freq = root->freq+1;
}
else if (strcmp(node->str, root->str)<1){
Insert(node,root->left);
}
else {
Insert(node,root->right);
}
return 0;
}