从名称文件中读取,我试图将这些名称放入二叉搜索树中。但是由于某些原因,当我读取文件时,我从一个随机的垃圾文件节点开始:
TreeNode* read_from_file(const char* file){
File *fp = fopen(file,"r");
char buffer[MAX_NAME_LEN];
TreeNode *t = NULL;
t = insert(t,buffer); //insert is just your standard function for creating a binary tree
while(!feof(fp)){
fscanf(fp,"%s",buffer);
insert(t,buffer);
}
return t;
fclose(fp);
}
然后,当我打印出树时,我在列表中得到一个看似随机的节点,例如'{或ÐFÀ>以及名称节点,当输入的文件只有像bob matt和nick这样的名称时。
在填充之前插入buffer
。随机垃圾只是在你自己对数组做任何事情之前恰好在数组中出现的东西。
明显的解决方法:移除第一个insert
。(事实上,我想不出它在那里的原因)因为你需要把开始节点t
保存在某个地方,在结束时返回它,你需要重新思考你的循环。要么插入一个假字符串作为'根'(但不使用未初始化的buffer
!),要么在循环之前做一个fscanf
。