圖30-1所示爲二叉樹的層次遍歷,即按照箭頭所指方向,按照1,2,3,4的層次順序,對二叉樹中的各個結點進行訪問。
圖30-1 二叉樹的層次遍歷
要進行層次遍歷,需要藉助一個隊列。先將二叉樹根結點入隊,然後出隊,訪問出隊結點,若它有左子樹,則將左子樹根節點入隊;若它有右子樹,則將右子樹根節點入隊。然後出隊,訪問出隊結點......如此反覆,直至隊列爲空。
二叉樹的層次遍歷算法如下:
template<typename DataType>
inline void BinaryTree<DataType>::LevelOrder(BTNode<DataType>* root)
{
queue<BTNode<DataType> *> que;
BTNode<DataType> *p;
que.push(root);
while (!que.empty())
{
p = que.front();
cout << p->data << " ";
que.pop();
if (p->LChild)
{
que.push(p->LChild);
}
if (p->RChild)
{
que.push(p->RChild);
}
}
cout << endl;
}