typedef struct qnode
{
    PTree data[MAXSIZE];
    int front;
    int rear;
}Queue,*PQueue;

/*----------------------------------------------------*/
PQueue init_queue()
{
    PQueue pnode;
    pnode = (PQueue)malloc(sizeof(Queue));
    pnode->front = pnode->rear = 0;
    return (pnode);
}
/*----------------------------------------------------*/
int empty_queue(PQueue pnode)
{
    if(pnode->front == pnode->rear)
    {
        return (1);
    }
    else
    {
        return (0);
    }
}
/*----------------------------------------------------*/
int full_queue(PQueue pnode)
{
    if((pnode->front +1)%MAXSIZE == pnode->rear)
    {
        return (1);
    }   
    else
    {
        return (0);
    }
}
/*----------------------------------------------------*/
void in_queue(PQueue pnode, PTree t)
{
    pnode->rear = (pnode->rear + 1)% MAXSIZE;
    pnode->data[pnode->rear] = t;
}
/*----------------------------------------------------*/
void out_queue(PQueue pnode, PTree *t)
{
    pnode->front = (pnode->front + 1) % MAXSIZE;
    *t = pnode->data[pnode->front];
}

/*----------------------------------------------------*/
void levelorder(PTree root)
{   
    PTree now_node = root;
    PQueue q;   

    if(NULL != now_node)
    {
        q = init_queue();
        printf("%d ",now_node->data);
        in_queue(q,now_node);
        while(!empty_queue(q))
        {
            out_queue(q,&now_node);
            if(now_node->lchild)
            {   
                printf("%d ", now_node->lchild->data);
                in_queue(q, now_node->lchild);
            }   
            if(now_node->rchild)
            {
                printf("%d ", now_node->rchild->data);
                in_queue(q, now_node->rchild);
            }
        }
    }
}

posted on 2012-09-10 10:53  gooner  阅读(128)  评论(0)    收藏  举报