**
```
#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;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!