您的位置:首页 > 理论基础 > 数据结构算法

【数据结构与算法】二叉树的层序遍历

2016-03-12 11:08 302 查看
转载请注明出处: http://blog.csdn.net/ns_code/article/details/13169703

    前面有篇博客详细分析了二叉树三种遍历(前序、中序、后序)方式的递归与非递归实现,参见:http://blog.csdn.net/ns_code/article/details/12977901,但把二叉树的层序遍历算法给漏掉了,实际上也不能说漏掉了,毕竟层序遍历的实现方法与这三种遍历的实现方法有所不同,因此单独拿出来分析比较合适。

    二叉树的层序遍历的实现还是比较简单的,由于其层级的关系,很明显要用到队列来辅助实现,主要是从左向右,自上而下,依次将二叉树的各节点入队,这样便可以保证输出的顺序是层序排列的。下面是算法的实现思想:

    先将树的根节点入队,

    如果队列不空,则进入循环

    {

      将队首元素出队,并输出它;

      如果该队首元素有左孩子,则将其左孩子入队;

      如果该队首元素有右孩子,则将其右孩子入队

    }

    C语言代码如下:

[cpp] view
plain copy

 





void LevelOrderTraverse(BiTree T,Status(*Visit)(TElemType))  

{  

    //Visit是对节点操作的应用函数,  

    //在这里,对每个数据元素调用函数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");  

    }  

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