c语言描述运行正常,二叉树的层序遍历3.1.2

时间:2021-05-29 11:22:44
#include<stdio.h>
#include<stdlib.h>

#define MAX 100
#ifndef true
#define true 1
#define false 0
typedef int bool;
#endif
/**
二叉树的链式表示法
**/
//结点
typedef char Ele;
typedef struct Node{
Ele data;
struct Node *left;
struct Node *right;
}*T,*Tnode;


void cin(Ele *e){
scanf("%c",e);
}
//递归前序创建二叉树
T createTree(){
T t;
Ele tmp;
cin(&tmp);
if(tmp=='#')
t=NULL;
else{
t=(Tnode)(malloc)(sizeof(struct Node));
t->data=tmp;
t->left=createTree();
t->right=createTree();
}
return t;
}

/***
队列的顺序表示,循环存储
****/

typedef Tnode Elem;//结点数据域里存的是树结点的指针
const Elem ERROR=NULL;
typedef struct Que{
Elem data[MAX];
int front;
int rear;
}*Q;
//创建队列
Q createQue(){
Q q=(Q)malloc(sizeof(struct Que));
q->rear=q->front=-1;
}
//队列是否满
bool isfull(Q q){
return q->front==(q->rear+1)%MAX;
}

//队列是否为空
bool isempty(Q q){
return q->front==q->rear;
}
//入队列
void add(Elem e,Q q){
if(isfull(q))
printf("队列满了");
else{
q->data[++q->rear]=e;
}
}


//出队列
Elem del(Q q){
if(isempty(q)){
printf("队列空了");
return ERROR;}
else{
return q->data[++q->front];
}
}



//树的层序遍历
void TarvelTree(T t){
Tnode tmp;//临时树结点指针
Q q=createQue();
add(t,q);
while(!isempty(q)){
tmp=del(q);
printf("%c ",tmp->data);
if(tmp->left)
add(tmp->left,q);//入队列
if(tmp->right)
add(tmp->right,q);
}

}

int main(){
T t=createTree();

TarvelTree(t);

}

c语言描述运行正常,二叉树的层序遍历3.1.2