如何从输入文件文本填充C中的二叉树

时间:2019-06-10 09:52:23

标签: c file pointers tree scanf

我正在从事这个课堂项目。第一步是从txt文件获取输入并将其存储在树中。第二点是允许用户在该树中按每列的第一个元素(即日期)搜索存储的值。第三点是允许用户从特定日期删除值。

首先这是输入文件格式,如您所见,其中有一个日期(年,月,日,小时),值#1和#2:

  • 2019060908 1.2 3.4

  • 2019060909 5.6 7.8

  • ....

我确实需要第一步的帮助。哪个是从该txt文件获取输入并将其存储在树中。首先,我不确定我应该使用哪种树。

这是我尝试的树结构

    typedef struct my_bt
 {
       char value;                  
       struct my_bt  *left_p, *right_p;     
   } my_bt_t;

主要功能基本上是一个函数,它获取我的txt文件第一行中的所有三个值,这就是我开始的地方:

int main (void) {

   int value;
   char str1[10], str2[10];

   FILE *file_input;

   file_input = fopen ("file_input", "r+");

   fscanf(file_input, "%d %s %s", &value, str1, str2);

   printf("Read String1 %d \n", value );
   printf("Read String2 %s \n", str1 );
   printf("Read String3 %s \n", str2 );

   fclose(file_input);

   /* function call */

   insert_in_bt(**root_p, value);

   return(0);
}

然后我尝试实现一个在树中插入值的函数,这里是:

int insert_in_bt(my_bt_t **root_p,
                    int value)
{
    int insert;
    my_bt_t *node_p,
              *father_p,
              *new_p;


    for (node_p = father_p = *root_p;
        ((node_p != NULL) && (node_p -> value != value ));
        father_p = node_p, node_p = (value < node_p->value)?
                    node_p ->left_p:
                    node_p ->right_p);

    if (node_p != NULL)
        insert = 0;
    else
    {
        insert = 1;
        new_p = (my_bt_t *)malloc(sizeof(my_bt_t));
        new_p -> value = value;
        new_p -> left_p = new_p -> right_p = NULL;
        if (node_p == *root_p)
            *root_p = new_p;
        else
            if (value < father_p -> value)
            father_p -> left_p = new_p;
           else
            father_p -> right_p = new_p;
    }
    return(insert);
}

我知道这有点混乱,并且我知道有一些错误会导致这是编译器所说的

  • 错误:未声明“ root_p”(此功能首次使用)    insert_in_bt(** root_p,value);                              ^

  • 注释:对于每个未声明的标识符,出现在每个函数中的报告次数仅为一次。

  • 警告:来自不兼容指针类型的分配[-Wincompatible-pointer-types] Father_p = node_p,node_p =(value value)?

  • 警告:来自不兼容指针类型[-Wincompatible-pointer-types]的赋值    Father_P-> left_p = new_p;                    ^

  • 警告:来自不兼容指针类型[-Wincompatible-pointer-types]的赋值    父亲p->权利p = new_p;                    ^
  • 警告:忽略使用属性warn_unused_result [-Wunused-result]声明的“ fscanf”的返回值    fscanf(file_input,“%d%s%s”,&value,str1,str2);

如果我可以使这两个功能“协作”,那么我可以重申它们来填充树(如果确实可行)。指针和类型有问题,但是我觉得我走了错误的道路来解决问题并误入歧途,所以我真的对新观点或新解决方案持开放态度。我知道有很多东西,但是人们告诉我要非常具体!

谢谢大家!

0 个答案:

没有答案