1. 广度优先搜索(Breadth-First-Search)
百度百科: 宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。 Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。 其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。 换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。
- 一般用来遍历树状结构
- 一般以层为主,从根节点一层一层的往下遍历
- 看起来就像越来越宽
层序遍历是一种广度优先的遍历方式,先遍历根节点这一层,再遍历第二层,依次这样从上到下,从左到右。 利用队列先入先出的特性。根节点入队列,开始循环判断,条件是队列是否为空,先处理当前节点,然后出队列(此时队列为空),看看当前节点有没有左右子节点, 如果有入队列(此时队列不为空,进入下一层循环)以此类推。
代码实现:
func (b *BST) LevelOrder() {
queue := LoopQueue.New(30)
queue.Enqueue(b.root)
for ! queue.IsEmpty() {
cur := queue.Dequeue().(*Node)
fmt.Println(cur.e)
if cur.left != nil {
queue.Enqueue(cur.left)
}
if cur.right != nil {
queue.Enqueue(cur.right)
}
}
}