代码在这
init_sqqueue(&Q);
en_sqqueue(&Q,t); 调用不了,麻烦帮我改改
#include
typedef struct node *pointer;
typedef char datatype;
const int maxsize=100;
struct node {
datatype data;
pointer lchild,rchild;
pointer next;
};
typedef pointer bitree;
bitree prein_creat(datatype Pre[],int ps, int pe, datatype In[],int is, int ie){
//先序和中序建立二叉树,ps、pe、is、ie分别为区间的起止节点
bitree t;
int i;
if(ps>pe) return NULL;
t=new node;//生成根结点
t->data=Pre[ps];
i=is;
while(In!=Pre[ps]) i++;//寻找中序序列中根的位置i
//生成左子树
t->lchild=
prein_creat(Pre,ps+1,ps+i-is,In,is,i-1);
//生成右子树
t->rchild=
prein_creat(Pre,ps+i-is+1,pe,In,i+1,ie);
return t;
}
typedef struct {
datatype data[maxsize];
char front,rear;
}sqqueue ;
void init_sqqueue(sqqueue *sq) {
sq->front=sq->rear=0;
}
int empty_sqqueue(sqqueue *sq) {
if(sq->rear==sq->front) return 1;
else return 0;
}
int gethead_sqqueue(sqqueue *sq,datatype x) {
if(sq->rear==sq->front)
{coutdata[(sq->front+1)%maxsize];
return 1;} }
int en_sqqueue(sqqueue *sq,datatype x) {
if((sq->rear+1)%maxsize==sq->front)
{coutrear=(sq->rear+1)%maxsize;
sq->data[sq->rear]=x;
return 1;} }
int de_sqqueue(sqqueue *sq,datatype x) {
if(sq->rear==sq->front)
{coutfront=(sq->front+1)%maxsize;
x=sq->data[sq->front];
return 1;} }
void levelorder(bitree t) { //层次遍历
typedef pointer sqqueue;
pointer p;
node* Q;//循环队列,元素为结点指针,类型为pointer
if(t==NULL) return;
init_sqqueue(&Q);
en_sqqueue(&Q,t); //根结点入队
while(!empty_sqqueue(&Q)) { //队列非空时
de_sqqueue(&Q,p);
coutdatalchild!=NULL)
en_sqqueue(&Q,p->lchild); //左孩子入队
if(p->rchild!=NULL)
en_sqqueue(&Q,p->rchild); //右孩子入队
}
}
好心人 快帮我一下
|