#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxsize 20
typedef struct biTreenode
{
char data;
struct biTreeNode *lchild;
struct biTreenode *rchild;
} bitree, *BiTree;
typedef struct
{
BiTree data[maxsize];
int front;
int rear;
int size;
} queue, *Queue;
int initQueue(Queue q)
{
q->front = q->rear = 0;
q->size = maxsize;
return 1;
}
int isQueueEmpty(Queue q)
{
if (q->front == q->rear)
return 1;
else
{
return 0;
}
}
BiTree sqGetHead(Queue q)
{
if (q->front == q->rear)
return 0;
return q->data[q->front];
}
int EnQueue(Queue q, BiTree t)
{
if ((q->rear + 1) % q->size == q->front)
return 0;
q->data[q->rear] = t;
q->rear = (q->rear + 1) % q->size;
return 1;
}
BiTree DeQueue(Queue q)
{
if (q->rear == q->front)
return NULL;
BiTree p = q->data[q->front];
q->front = (q->front + 1) % q->size;
return p;
}
void Create_biTree(BiTree *T)
{
queue q;
BiTree p,s;
char father,child;
int flag;
initQueue(&q);
fflush(stdin);
scanf("%c %c %d",&father,&child,&flag);
while(child != '#'){
p = (BiTree)malloc(sizeof(bitree));
p->data = child;
p->lchild=NULL;
p->rchild=NULL;
EnQueue(&q,p);
if(father == '#') *T = p;
else{
s = sqGetHead(&q);
while(s->data != father){
DeQueue(&q);
s = sqGetHead(&q);
}
if(flag==0)s->lchild=p;
else s->rchild=p;
}
fflush(stdin);
scanf("%c %c %d",&father,&child,&flag);
}
return;
}
void dispBiTree(BiTree T,int level, char c){
int i,k;
if(T){
for(i=1;i<level;i++)putchar(' ');
printf("%c(%c)+",T->data,c);
for(k=i+4;k<20;k++)putchar('-');
putchar('\n');
dispBiTree(T->lchild,level+2,'L');
dispBiTree(T->rchild,level+2,'R');
}
}
void DLR(BiTree T){
if(T){
printf("%c",T->data);
DLR(T->lchild);
DLR(T->rchild);
}
}
void menu(){
printf("*****菜单*****\n");
printf("1.读边法创建二叉链表\n");
printf("2.凹入法输出二叉链表\n");
printf("输入0退出\n");
printf("**************\n");
}
int main(){
int choice;
BiTree t;
menu();
printf("输入选项:\n");
for(scanf("%d",&choice);choice!=0;scanf("%d",&choice)){
switch(choice){
case 1:
printf("读边法创建树\n");
Create_biTree(&t);
printf("创建完成\n");
DLR(t);
printf("\n");
break;
case 2:
dispBiTree(t,5,'ROOT');
printf("\n");
break;
default:
break;
}
menu();
printf("输入选项:\n");
}
}
二叉链表实现(c语言)
最新推荐文章于 2023-08-05 16:18:26 发布