前面有篇博客详细分析了二叉树三种遍历(前序、中序、后序)方式的递归与非递归实现,参见:https://www.vxzsk.com/420.html,但把二叉树的层序遍历算法给漏掉了,实际上也不能说漏掉了,毕竟层序遍历的实现方法与这三种遍历的实现方法有所不同,因此单独拿出来分析比较合适。
二叉树的层序遍历的实现还是比较简单的,由于其层级的关系,很明显要用到队列来辅助实现,主要是从左向右,自上而下,依次将二叉树的各节点入队,这样便可以保证输出的顺序是层序排列的。下面是算法的实现思想:
先将树的根节点入队, 如果队列不空,则进入循环 { 将队首元素出队,并输出它; 如果该队首元素有左孩子,则将其左孩子入队; 如果该队首元素有右孩子,则将其右孩子入队 }
C语言代码如下:
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"); } }
感觉本站内容不错,读后有收获?小额赞助,鼓励网站分享出更好的教程
上一篇:二叉树递归遍历与非递归遍历
下一篇:python helloworld实现
^