https://blog.csdn.net/ns_code/article/details/13169703
二叉樹的層序遍歷算法給漏掉了,實際上也不能說漏掉了,畢竟層序遍歷的實現方法與這三種遍歷的實現方法有所不同,因此單獨拿出來分析比較合適。
二叉樹的層序遍歷的實現還是比較簡單的,由於其層級的關係,很明顯要用到隊列來輔助實現,主要是從左向右,自上而下,依次將二叉樹的各節點入隊,這樣便可以保證輸出的順序是層序排列的。下面是算法的實現思想:
先將樹的根節點入隊,
如果隊列不空,則進入循環
{
將隊首元素出隊,並輸出它;
如果該隊首元素有左孩子,則將其左孩子入隊;
如果該隊首元素有右孩子,則將其右孩子入隊
}
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");
- }
- }