#include<stdio.h>
#include<stdlib.h>
typedef struct treenode{
char c;
struct treenode *left;
struct treenode *right;
}treenode,*ptree;//定义一个树结点结构体
typedef struct list{
ptree data;
struct list *next;
}list,*plist;//辅助队列
typedef struct listht{
list *front,*rear;
};//队列头尾指针
void enlist(listht &Q,ptree p){
plist s=(plist) malloc(sizeof (list));
s->data=p;s->next=NULL;
Q.rear->next=s;
Q.rear=s;
}//入队
void delist(listht &Q,ptree &p){
if(Q.front==Q.rear){
return;
}//判断队列是不是空
plist s=Q.front->next;
p=s->data;
Q.front->next=s->next;
if(Q.rear==s){//删除的是最后一个就把队列置空
Q.rear=Q.front;
}
}//出队
bool empty(listht Q){
if(Q.front==Q.rear){
return true;
}else{
return false;
}
}
void levelorder(ptree tree){
listht Q;
Q.front=Q.rear=(plist) malloc(sizeof (list));
Q.front->next=NULL;
ptree p;
enlist(Q,tree);
while(!empty(Q)){
delist(Q,p);//出队当前结点并打印
printf("%c",p->c);
if(p->left!=NULL){
enlist(Q,p->left);
}
if(p->right!=NULL){
enlist(Q,p->right);
}
}
}
int main(){
ptree pnew;
char c;
ptree tree=NULL;
plist phead=NULL,ptail=NULL,listnew=NULL,pcur=NULL;
while(scanf("%c",&c)){
if(c=='\n'){
break;
}
pnew=(ptree)calloc(1,sizeof(treenode));
pnew->c=c;
listnew=(plist)calloc(1,sizeof(list));
listnew->data=pnew;
if(NULL==tree){
tree=pnew;
phead=listnew;
ptail=listnew;
pcur=listnew;
}else{
ptail->next=listnew;
ptail=listnew;
if(NULL==pcur->data->left){
pcur->data->left=pnew;
}else if(NULL==pcur->data->right){
pcur->data->right=pnew;
pcur=pcur->next;
}
}
}//创二叉树的过程
levelorder(tree);
return 0;
}
C语言二叉树层序遍历(广度优先遍历)
最新推荐文章于 2024-09-11 11:42:14 发布