#include<stdio.h>
#include<malloc.h>
#define Maxsize 10
//用层次建立二叉树,引入队列
typedef struct Bnode{
struct Bnode *lchild;
struct Bnode *rchild;
char data;
}Bnode,*Btree;
typedef struct{
Bnode *arr[Maxsize];//指针数组
int front,rear;
}sqQueue;
void InitQueue(sqQueue &Q){
Q.rear=Q.front=0;
}
bool Enqueue(sqQueue &Q, Bnode *x){//插入数据类型要能对应上
if((Q.rear+1)%Maxsize==Q.front)
return false;
Q.arr[Q.rear]=x;
Q.rear=(Q.rear+1)%Maxsize;
}
bool Dequeue(sqQueue &Q,Bnode *x){//插入数据类型要能对应上
if(Q.rear=Q.front)
return false;
x=Q.arr[Q.front];
Q.front=(Q.front+1)%Maxsize;
return true;
}
Bnode *levelserach(Btree &tr){//返回一个结点
sqQueue Q;
InitQueue(Q);
char flag=' ';
if(tr->lchild==NULL||tr->rchild==NULL){//左右但凡有一个为空就可插入
printf("sdda");
return tr;
}else{
Enqueue(Q,tr);
printf("年时代的哈");
printf("%c我的",tr->lchild);
while(true){//建立完全二叉树
Btree q;
Dequeue(Q,q);
printf("%c",q->data);
if(q->lchild!=NULL){//有问题
Enqueue(Q,q->lchild);
}else if(q->rchild!=NULL){
Enqueue(Q,q->rchild);
}else{
return q;
}
}
}
}
void initTree(Btree &tr){//初始化二叉树,要输入根节点数据
Bnode *p;
p=(Bnode*)malloc(sizeof(Bnode));
p->lchild=NULL;
p->rchild=NULL;//将左右孩子都置空
char input;
printf("请输入根节点数据\n");
scanf("%c",&input);
p->data= input;
tr=p;
}
void insert(Btree &bt,char x){
Bnode *p,*q;//p是新建立的结点
p=(Bnode*)malloc(sizeof(Bnode));
p->lchild=NULL;
p->rchild=NULL;//将左右孩子都置空
char input=x;
p->data=input;
// printf("1插入成功");
q=levelserach(bt);//寻找待插入的双亲结点
if(q->lchild==NULL){
q->lchild=p;
printf("左插入成功\n");
}else if(q->rchild==NULL){
q->rchild=p;
printf("右插入成功\n");
}
}
int main(void)
{
Btree root;
initTree(root);
char input;
scanf("%c",&input);
while(input!='n'){
insert(root,input);
scanf("%c",&input);//需要在循环里面设置scanf重输入
}
printf("sada");
return 0;
}