二、(4)二叉樹的層次遍歷
阿新 • • 發佈:2018-12-08
二叉樹本來是分層結構,但若施加某種約束(如遍歷),則可以轉變成線性結構。
二叉樹的遍歷方法主要有:前序遍歷(DLR),中序遍歷(LDR),後序遍歷(LRD),層次遍歷。本文主要介紹二叉樹層次遍歷方法。
層次遍歷:從根節點開始,向下逐層從左往右遍歷。
例如:
上圖所示的二叉樹的層次遍歷順序為:0 1 2 3 4 5 6 7
本文使用的二叉樹資料結構參見之前部落格:https://blog.csdn.net/qq_18108083/article/details/84727888
層次遍歷的實現藉助於佇列結構的先進先出特性,自根節點往下逐層從左往右入隊,每個迴圈出隊一個節點進行遍歷。
template<typename T> void binTree<T>::travLevel(binNode<T>* bn_i, void(*func)(T& bn)) { queue<binNode<T>*> q; q.enqueue(bn_i); while (!q.empty()) //佇列非空 { bn_i = q.dequeue(); func(bn_i->data); if(bn_i->lc) q.enqueue(bn_i->lc); if(bn_i->rc) q.enqueue(bn_i->rc); } }
執行結果: