您的位置:首页 > 其它

二叉树的层序遍历

2016-03-11 18:26 381 查看
void LevelOrderTraverse(BiTree T,Status(*Visit)(TElemType))  

{  

    /* 采用二叉链表存储结构,Visit是对数据元素操作的应用函数。*/  

    /* 层序遍历二叉树T算法(利用队列),对每个数据元素调用函数Visit */  

    SqQueue q;  

    QElemType p;  

    if(T)  

    {  

        InitQueue(&q);  

        EnQueue(&q,T);  

        while(!QueueEmpty(q))  

        {  

            DeQueue(&q,&p);  

            Visit(p->data);  

            if(p->lchild!=NULL) EnQueue(&q,p->lchild);  

            if(p->rchild!=NULL) EnQueue(&q,p->rchild);  

        }  

        printf("/n");  

    }  

}  

给定一棵二叉树,要求分层遍历该二叉树,即从上到下按层次访问该树,每一层单独输出一行,每一层要求访问的顺序为从左到右。

我们在遍历的过程中将该层节点的孩子节点压入一个队列,这样就可以实现从上到下一层一层地遍历该二叉树。

C++的程序描述如下:

[cpp] view
plain copy

 print?

void printNodeByLevel(BinTree root)  

{  

    if(root == NULL)  

        return;  

  

    vector<Node *> vec;  

    vec.push_back(root);  

    int cur = 0;  

    int last = 1;  

  

    while(cur < vec.size()) {  

        last = vec.size();  

  

        while(cur < last) {  

            cout<<vec[cur]->data<<" ";  

  

            if(vec[cur]->pLeft != NULL)  

                vec.push_back(vec[cur]->pLeft);  

            if(vec[cur]->pRight != NULL)  

                vec.push_back(vec[cur]->pRight);  

  

            ++cur;  

        }  

  

        cout<<endl;  

    }  

}  

其中BinTree的定义如下:

[cpp] view
plain copy

 print?

typedef struct Node  

{  

    struct Node *pLeft;  

    struct Node *pRight;  

    int data;  

}LNode, *BinTree;  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: