Micokery九九 2022-11-26 15:14 采纳率: 91.7%
浏览 0
已结题

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

**

```

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

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

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

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

#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++;
}
}
}
}

```**

  • 写回答

2条回答 默认 最新

  • CSDN专家-sinJack 2022-11-26 15:26
    关注

    参考这个吧:

    #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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月26日
  • 已采纳回答 11月26日
  • 创建了问题 11月26日

悬赏问题

  • ¥50 安装华大九天aether
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证