起源
BFS本来就是因图搜索而生,所以系列二在一的基础上上图这一复杂的数据结构,并且顺带讲下树(树也是特殊的图)。
图的表示
图可以用链接表和链接矩阵表示,前者适合稠密图,后者适合稀疏图。现在以算法面试题中经常用于表示的图结构为例说明。
* Definition for Undirected graph.
* class UndirectedGraphNode {
* int label;
* List<UndirectedGraphNode> neighbors;
* UndirectedGraphNode(int x) {
* label = x;
* neighbors = new ArrayList<UndirectedGraphNode>();
* }
* };
为了简化这里用无向图,这里的定义是一个嵌套的图数据结构,也就是和链接表表示的是类似的。
图的操作
对于图就需要创建对应的哈希表来标记了,严格按照标准BFS的程序的写法。可以用普通 for语句和迭代for循环来访问相邻元素。
层级遍历
一般情况下,求最短路径(步数)需要层级遍历,但求无向图的连通块的层级遍历,用函数的BFS的可以抽出来层级遍历。
练习
https://www.lintcode.com/zh-cn/problem/connected-component-in-undirected-graph/#
https://www.lintcode.com/zh-cn/problem/binary-tree-level-order-traversal-ii/#
https://www.lintcode.com/zh-cn/problem/binary-tree-level-order-traversal/