°希作先生丶 发表于 2018-11-23 08:47:31

树的孩子兄弟表示法的层序遍历问题

如题,我写了2个创建树的函数,具体问题是:如果手动输入信息的话,遍历就没有问题,而如果使用数组模仿输入创建树的话,就会有很多看不懂的错误,而且有个神奇的现象,两次毫无变化的编译后,输出的结果竟然不一样- =。附上代码,求大神指教。
//这个是手动输入树
<void create_CBtree(cbNode* cb)
{
    if((*cb) == nullptr)
      init_CBtree(cb);

    int length = 0;
    char* tmpIn = new char;
    cin.getline(tmpIn,255);
    length = get_length_charM(tmpIn);


    if(length == 0)
    {
      (*cb) = nullptr;
      return;
    }


    (*cb)->dt->name = new char;

    for(int i = 0;i < length;i++)
      (*cb)->dt->name = tmpIn;

    cout<<"input eldest node : "<<endl;
    create_CBtree(&((*cb)->eldest));

    cout<<"input borther node : "<<endl;
    create_CBtree(&((*cb)->borther));

    delete tmpIn;
}>
//这个是基于一个数组自动进行
<static int imitate_index = 0;
char imitate = {'A','B','D','#','E','#','#','C','F','#','G','#','#','#','#'};
void create_CBtree_auto(cbNode* cb)
{

      if(imitate == '#')
      {
            (*cb) = nullptr;
            imitate_index++;
             return;
      }
      init_CBtree(cb);
      (*cb)->dt->name = new char;
      (*cb)->dt->name = imitate;
      imitate_index++;
      create_CBtree_auto(&(*cb)->eldest);
      create_CBtree_auto(&(*cb)->borther);

}>
//最后表结构体信息附上
<
//树的结点
typedef struct Data
{
    int id;
    char* name;
}*data;

typedef struct CBtree
{
    data dt;
    struct CBtree* eldest;
    struct CBtree* borther;
}*cbNode;
//队列结点和队列
typedef struct QueueNode
{
    cbNode cdt;
    struct QueueNode* next;

}*queueNode;

typedef struct Queues
{
    queueNode frontP;
    queueNode rearP;

}*queues;
>

°希作先生丶 发表于 2018-11-23 08:54:40

好吧我知道那里错误了- =,因为在自动输入函数的空值判断之后未给传入的结点分配内存- =导致错误- =,谢谢大家了。
页: [1]
查看完整版本: 树的孩子兄弟表示法的层序遍历问题