二叉树的层次遍历

层次遍历用队列实现:

方法一:

int visit(BiTree T)  
{  
    if(T)  
    {  
        printf("%c ",T->data);  
        return 1;  
    }  
    else  
        return 0;  
}  
  
void LeverTraverse(BiTree T)   //方法一、非递归层次遍历二叉树   
{  
    queue <BiTree> Q;  
    BiTree p;  
    p = T;  
    if(visit(p)==1)  
        Q.push(p);  
    while(!Q.empty())  
    {  
        p = Q.front();  
        Q.pop();  
        if(visit(p->lchild) == 1)   
            Q.push(p->lchild);  
        if(visit(p->rchild) == 1)  
            Q.push(p->rchild);  
    }  
}  

方法二:

void LevelOrder(BiTree BT)     //方法二、非递归层次遍历二叉树   
{  
    BiTNode *queue[10];//定义队列有十个空间  
    if (BT==NULL)  
        return;  
    int front,rear;  
    front=rear=0;  
    queue[rear++]=BT;  
    while(front!=rear)//如果队尾指针不等于对头指针时  
    {  
        cout<<queue[front]->data<<"  ";  //输出遍历结果  
        if(queue[front]->lchild!=NULL)  //将队首结点的左孩子指针入队列  
        {  
            queue[rear]=queue[front]->lchild;  
            rear++;    //队尾指针后移一位  
        }  
        if(queue[front]->rchild!=NULL)  
        {  
            queue[rear]=queue[front]->rchild;    //将队首结点的右孩子指针入队列  
            rear++;   //队尾指针后移一位  
        }  
        front++;    //对头指针后移一位  
    }  
}  

 

posted @ 2013-04-09 18:32  一枚程序员  阅读(486)  评论(0编辑  收藏  举报