viency13 2023-05-01 12:59 采纳率: 68.8%
浏览 17
已结题

为什么会出现段错误啊?

7-6 层次遍历
给定二叉树的包含虚结点的先序遍历序列信息,按层次顺序给出遍历的结果。

输入格式:
首先输入一个整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据在一行中输入一个字符串(不含空格且长度不超过80),表示二叉树的先序遍历序列(其中@表示虚结点)。

输出格式:
对于每组测试,输出层次遍历的结果。

输入样例:
1
ABD@@EG@@@C@F@@
输出样例:
ABCDEFG
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB


```c
#include <stdio.h>
#include <stdlib.h>

using namespace std;

typedef char TElemType;

const int MAXSIZES = 50;
 
typedef struct BiTNode {
 TElemType data;
 struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;

typedef BiTree QElemType;

typedef struct {
     QElemType data[MAXSIZES];
     int front;
     int rear;
}SqQueue;

void CreateBiTree(BiTree *T)
{
     TElemType ch;
     scanf("%c", &ch);
     if (ch == '@')
     {
          *T = NULL;
     }
     else
     {
          *T = (BiTree) malloc(sizeof(BiTNode));
          if (!T)
          {
               exit(0);
          }
          (*T)->data = ch;
          CreateBiTree(&(*T)->lchild);
          CreateBiTree(&(*T)->rchild);
     }
}

void InitQueue(SqQueue *Q)
{
     Q->front = Q->rear = 0;
}

void EnQueue(SqQueue *Q, QElemType q)
{
     if ((Q->rear + 1) % MAXSIZES == Q->front)
          return;
     Q->data[Q->rear] = q;
     Q->rear = (Q->rear + 1) % MAXSIZES;
}

void DeQueue(SqQueue *Q, QElemType *q)
{
     if (Q->front == Q->rear)
          return;
     *q = Q->data[Q->front];
     Q->front = (Q->front + 1) % MAXSIZES;
}

void LevelOrder(BiTree T)
{
     SqQueue Q;
     InitQueue(&Q);
     BiTree p;
     EnQueue(&Q, T);
     while(Q.front != Q.rear)
     {
          DeQueue(&Q, &p);
          printf("%c", p->data);
          if (p->lchild != NULL)
          {
               EnQueue(&Q, p->lchild); 
          }
          if (p->rchild != NULL)
          {
               EnQueue(&Q, p->rchild);
          } 
     } 
}

int main()
{
    int n;
    scanf ("%d", &n);
    while (n--)
    {
        BiTree t;
        CreateBiTree(&t);
        LevelOrder(t);
    }
    return 0;
}

```

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2023-05-01 14:43
    关注

    这段代码没什么问题,第28行输入 scanf("%c", &ch); 语句修改为:scanf(" %c", &ch); ,即可实现题目的要求,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    
    using namespace std;
    
    typedef char TElemType;
    
    const int MAXSIZES = 50;
    
    typedef struct BiTNode {
        TElemType data;
        struct BiTNode* lchild, * rchild;
    }BiTNode, * BiTree;
    
    typedef BiTree QElemType;
    
    typedef struct {
        QElemType data[MAXSIZES];
        int front;
        int rear;
    }SqQueue;
    
    void CreateBiTree(BiTree* T)
    {
        TElemType ch;
        scanf(" %c", &ch);  //scanf("%c", &ch); 修改
        if (ch == '@')
        {
            *T = NULL;
        }
        else
        {
            *T = (BiTree)malloc(sizeof(BiTNode));
            if (!T)
            {
                exit(0);
            }
            (*T)->data = ch;
            CreateBiTree(&(*T)->lchild);
            CreateBiTree(&(*T)->rchild);
        }
    }
    
    void InitQueue(SqQueue* Q)
    {
        Q->front = Q->rear = 0;
    }
    
    void EnQueue(SqQueue* Q, QElemType q)
    {
        if ((Q->rear + 1) % MAXSIZES == Q->front)
            return;
        Q->data[Q->rear] = q;
        Q->rear = (Q->rear + 1) % MAXSIZES;
    }
    
    void DeQueue(SqQueue* Q, QElemType* q)
    {
        if (Q->front == Q->rear)
            return;
        *q = Q->data[Q->front];
        Q->front = (Q->front + 1) % MAXSIZES;
    }
    
    void LevelOrder(BiTree T)
    {
        SqQueue Q;
        InitQueue(&Q);
        BiTree p;
        EnQueue(&Q, T);
        while (Q.front != Q.rear)
        {
            DeQueue(&Q, &p);
            printf("%c", p->data);
            if (p->lchild != NULL)
            {
                EnQueue(&Q, p->lchild);
            }
            if (p->rchild != NULL)
            {
                EnQueue(&Q, p->rchild);
            }
        }
    }
    
    int main()
    {
        int n;
        scanf("%d", &n);
        while (n--)
        {
            BiTree t;
            CreateBiTree(&t);
            LevelOrder(t);
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月9日
  • 已采纳回答 5月1日
  • 创建了问题 5月1日

悬赏问题

  • ¥15 淘宝自动下单XPath自动点击插件无法点击特定<span>元素,如何解决?
  • ¥15 曙光1620-g30服务器安装硬盘后 看不到硬盘
  • ¥15 抖音直播广场scheme
  • ¥15 为什么我明明有这个文件调试器还显示错误?
  • ¥15 软件工程用例图的建立(相关搜索:软件工程用例图|画图)
  • ¥15 如何在arcgis中导出拓扑关系表
  • ¥15 处理数据集文本挖掘代码
  • ¥15 matlab2017
  • ¥15 在vxWorks下TCP/IP编程,总是connect()报错,连接服务器失败: errno = 0x41
  • ¥15 AnolisOs7.9如何安装 Qt_5.14.2的运行库