从文件中读取名称以插入到二叉树中时出现问题

problems reading names from a file to insert into a binary tree

提问人:user47835 提问时间:7/16/2014 最后编辑:tshepanguser47835 更新时间:7/26/2014 访问量:445

问:

从名称文件中读取,我试图将这些名称放入二叉搜索树中。但是由于某种原因,当我读取文件时,我从随机垃圾文件节点开始:

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 等名称。

C file-io 二进制树 扫描 feof

评论

0赞 Micah Smith 7/17/2014
所以这个垃圾节点总是在根目录下?从你的问题中不确定。

答:

0赞 Jongware 7/17/2014 #1

在用任何东西填充它之前,先插入。随机垃圾就是在你自己对它做任何事情之前碰巧在该数组中的东西。buffer

显而易见的解决方案:删除第一个 .(事实上,我想不出它存在的原因。由于您需要将起始节点保存在某个地方,以便在最后返回它,因此您需要重新考虑您的循环。要么插入一个虚拟字符串作为“root”(但不使用未初始化的!),要么在循环之前执行。inserttbufferfscanf

评论

0赞 user47835 7/17/2014
啊,我明白了。感谢您清理它,我在第一次插入之前运行了 fscanf 并得到了预期的结果。