Tree 在给定子指针和父指针的情况下创建树

Tree 在给定子指针和父指针的情况下创建树,tree,binary-tree,packing,Tree,Binary Tree,Packing,我有一个文件,其中包含一组数字,每行有它们的父数字和子数字。我想在C中用它建一棵树。我该如何通过它 示例文件如下所示: Thisnode parentnode lchildnode rchildnode 1 14 -1 -1 2 13 -1 -1 3 10 -1 -1 4 9 -1 -1 5 13 -1 -1 6 11 -1 -1 7 9 -1 -1 8 12 -1 -1 9 10 7 4 10 11 3 9 11 12 10 6 12 15 11 8 13 14 2 5 14 1

我有一个文件,其中包含一组数字,每行有它们的父数字和子数字。我想在C中用它建一棵树。我该如何通过它

示例文件如下所示:

Thisnode parentnode lchildnode rchildnode 1 14 -1 -1 2 13 -1 -1 3 10 -1 -1 4 9 -1 -1 5 13 -1 -1 6 11 -1 -1 7 9 -1 -1 8 12 -1 -1 9 10 7 4 10 11 3 9 11 12 10 6 12 15 11 8 13 14 2 5 14 15 13 1 15 -1 14 12 Thisnode父节点lchildnode rchildnode 1 14 -1 -1 2 13 -1 -1 3 10 -1 -1 4 9 -1 -1 5 13 -1 -1 6 11 -1 -1 7 9 -1 -1 8 12 -1 -1 9 10 7 4 10 11 3 9 11 12 10 6 12 15 11 8 13 14 2 5 14 15 13 1 15 -1 14 12
完成这项任务有两个部分。构建一个简单的列表,并将未排序的列表组织到一个结构中

扫描仪 创建包含四个阶段(thisnode、parentnode、lchildnode、rchildnode)的。当机器处于第一个状态(thisnode)时,将新的“未排序”叶分配到列表的“顶部”。此列表应足够大,以容纳所有叶节点。还记得在最后一个阶段(rchildnode)结束时重置机器状态。 最后,从输入中读取单个
字符,一次读取一个,并评估以下条件

  • 检查签名(
    -
  • 检查字符是否介于
    0..9
    之间,并将值应用于临时数字
  • 如果
    1.
    2.
    为真,请读取下一个数字
  • 否则,将临时编号应用于顶部叶,并使机器进入下一个状态
  • 分类 在未排序的列表上迭代,并找到“root”元素。对于初始值和子级,使用“create”方法填充二叉树结构。类似于

    struct节点{
    int值;
    结构节点*左;
    结构节点*右;
    };
    结构节点*创建节点(int-keyvalue、int-lkey、int-rkey)
    {
    结构节点*n=malloc(sizeof(结构节点));
    n->value=keyvalue;
    n->left=0;
    n->right=0;
    如果(lkey>-1)
    {
    int llkey=你的迭代器左(lkey);
    int-lrkey=您的迭代器(lkey);
    n->left=创建_节点(lkey、llkey、lrkey);
    }
    如果(rkey>-1)
    {
    int rlkey=您的迭代程序左(rkey);
    int rrkey=你的迭代器右键(rkey);
    n->right=创建_节点(rkey、rlkey、rrkey);
    }
    返回n;
    }
    
    不是最干净的,但它会生成一个完整的二叉树


    看起来像是作业,我错了吗?真的需要扫描仪吗?从每行读取4
    int
    s就足够了。如果数据文件本质上是二进制的,则不会。如果出现
    -1
    ,则是对ANSI
    atoi
    课程工作的赠予。