-1

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

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 之类的名称。

4

1 回答 1

0

buffer你在用任何东西填充它之前插入。随机垃圾就是在您自己对它进行任何操作之前发生在该数组中的东西。

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

于 2014-07-16T21:10:11.790 回答