请问这个二叉树的层次遍历应该是哪样的

**

```

#define _CRT_SECURE_NO_WARNINGS
#include
#include

#define LEN sizeof(struct Bitnode)//求结构体的大小

struct Bitnode
{
char data; //存储数据
struct Bitnode* lchild; //左孩子
struct Bitnode* rchild; //右孩子
};

#define _CRT_SECURE_NO_WARNINGS
#include
#include

#define LEN sizeof(struct Bitnode)//求结构体的大小

struct Bitnode
{
char data; //存储数据
struct Bitnode* lchild; //左孩子
struct Bitnode* rchild; //右孩子
};

void Tie_Print(struct Bitnode* T) //层序遍历二叉树
{
int rear = 1;
int front = 0;
if (T == NULL)
{
printf("二叉树为空!\n");
return;
}
else
{
while (front < rear) //循环条件 队列非空
{
if (arry[front])
{
printf("%d ", arry[front]->data);
arry[rear++] = arry[front]->Lchild;
arry[rear++] = arry[front]->Rchild;
front++;
}
else
{
front++;
}
}
}
}

```**

参考这个吧:

#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 InOrderTraverse(BiTree T)
{
    if (!T)
    {
        return;
    }
    
    InOrderTraverse(T->lchild);
    printf("%c", T->data);
    InOrderTraverse(T->rchild);
}

// 二叉树的层序遍历 
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()
{
    BiTree t;
    printf("请按照前序扩展二叉树进行输入:(#表示空结点)\n");
    CreateBiTree(&t);
    printf("中序遍历: "); 
    InOrderTraverse(t);
    printf("\n层序遍历: "); 
    LevelOrder(t);
    
    return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632