二叉树宽度优先搜索( Breadth - first Search )使用队列来进行进行。
算法步骤:
1. 从根节点开始,使根节点入队;
2. 当队列不为空,使队头元素出队,打印其结点的数据域,若其有左右孩子,使其左右孩子按顺序入队;
3. 队列为空时,已经按照宽度遍历整个二叉树;
实现代码:
struct Tnode;
typedef struct TNode *SearchTree;
struct TNode
{
ElementType Element;
SearchTree Left;
SearchTree Right;
};
void bfs( SearchTree T )
{
Queue Q;
Q.Enqueue( T ); // Q存储指针,指针指向结点
while ( !Q.IsEmpty() )
{
SearchTree TmpCell = Q.Dequeue;
if ( TmpCell->Left != NULL )
Q.Enqueue( TmpCell->Left );
if ( TmpCell->Right != NULL )
Q.Eequeue( TmpCell->Right );
// 对结点Q进行打印等操作
}
}