Diamonds__ 2022-05-17 23:32 采纳率: 66.7%
浏览 24

二叉树的层序遍历遇到问题 求解答!!

借助了队列来实现二叉树的层序遍历,但是运行不出来


#define OK 1
#define ERROR 0
#define MaxSize 100
#define MAXQSIZE 100
typedef char TElemType;
typedef int Status;
typedef BiTNode QElemType;
typedef struct {
    QElemType *base;
//存放队中元素
    int front, rear;
//队头和队尾指针
} SqQueue;
//顺序循环队列类型
Status InitQueue(SqQueue &Q) {//构造一个空队列Q
    Q.base = new QElemType[MAXQSIZE]; //为队列分配一个最大容量为MAXSIZE的数组空间
    if (!Q.base)
        exit(OVERFLOW); //存储分配失败
    Q.front = Q.rear = 0; //头指针和尾指针置为零,队列为空
    return OK;
}
Status EnQueue(SqQueue &Q, QElemType e) {//插入元素e为Q的新的队尾元素
    if ((Q.rear + 1) % MAXQSIZE == Q.front) //尾指针在循环意义上加1后等于头指针,表明队满
        return ERROR;
    Q.base[Q.rear] = e; //新元素插入队尾
    Q.rear = (Q.rear + 1) % MAXQSIZE; //队尾指针加1
    return OK;
}
 
Status DeQueue(SqQueue &Q, QElemType &e) {//删除Q的队头元素,用e返回其值
    if (Q.front == Q.rear)
        return ERROR; //队空
    e = Q.base[Q.front]; //保存队头元素
    Q.front = (Q.front + 1) % MAXQSIZE; //队头指针加1
    return OK;
}
int QueueEmpty(SqQueue &Q) {  //判断队列是否为空
    if (Q.rear == Q.front)
        return 1;
    else
        return 0;
}
void LevelOrder(BiTree T) {
    SqQueue *qu;
    InitQueue(*qu);//初始化队列
    EnQueue(*qu,*T);
//根结点指针进入队列
    while (!QueueEmpty(*qu)) {
//队不为空,则循环
        DeQueue(*qu,*T); //出队结点p
        printf("%C", T->data);
//访问结点p
        if (T-> lchild!=NULL) EnQueue(*qu,*(T-> lchild));
//有左孩子时将其进队
        if (T-> rchild!=NULL) EnQueue(*qu,*(T-> rchild));
    }
//有右孩子时将其进队
}
int main() {
    BiTree BT=NULL;
    int x=0,y=0;
    cout<<"先序创建二叉树:";
    cout<<"\n先序输入二叉树节点:";
    CreateBiTree(BT);
    cout<<"\n先序遍历序列是:";
    Preorder (BT);
    cout<<"\n中序遍历序列是:";
    Inorder (BT);
    cout<<"\n后序遍历序列是:";
    Postorder (BT);
    cout<<"\n带#的先序遍历序列是:";
    Preorders (BT);
    cout<<"\n层序遍历序列是:";
    LevelOrder(BT);
    cout<<"\n后序遍历求二叉树深度是:"<<Depth(BT);
    cout<<"\n先序遍历求结点个数是:"<<Nodes(BT);
    cout<<"\n先序遍历求叶结点个数是:"<<LeafNodes(BT);
    cout<<"\n先序求结点个数和叶结点个数,";
    count(BT,x,y);
    printf("\n结点总数为:%d,叶结点总数为:%d",x,y);
    cout<<"\n先序交换二叉树,";
    exchange(BT);
    cout<<"\n交换后二叉树的先序遍历序列为:";
    Preorder (BT);
    cout<<"\n后序销毁二叉树:";
    Destroy(BT);
    cout<<"\n二叉树被销毁了!";
    return 0;
}

img

  • 写回答

1条回答 默认 最新

  • 昂格莱德 2022-05-17 23:59
    关注

    这是c++,我还以为c语言,InitQueue的参数是不是错了
    应该写成SqQueue*& ,对指针类型的引用

    评论

报告相同问题?

问题事件

  • 创建了问题 5月17日

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog