BFS遍历树和DFS遍历树
遍历树
按照遍历的顺序,绘制成树型结构
DFS遍历树
以下为图到遍历树的转化(如果不清楚图的遍历,请先阅读笔者的另一篇文章:图的遍历(动图)),按照DFS遍历的顺序,绘制成一棵树,途中红色的边就是遍历过程中没有经过的边(在遍历树上,红色的边其实是不存在的,只是为了和图做比对和便于后面的分析,笔者在遍历树上绘制出来了)
从遍历树中可以看出,非遍历的边可以指向自己的祖先节点(即后向边),而查找桥的算法恰恰就是使用了后向边的性质,而在BFS遍历树中并不存在该性质,所以查找桥只可以用DFS遍历
- 后向边:不在遍历树上的边
- 前向边:在遍历树上的边
BFS遍历树
以下为图到遍历树的转化(如果不清楚图的遍历,请先阅读笔者的另一篇文章:图的遍历(动图)),按照BFS遍历的顺序,绘制成一棵树,途中红色的边就是遍历过程中没有经过的边(在遍历树上,红色的边其实是不存在的,只是为了和图做比对和便于后面的分析,笔者在遍历树上绘制出来了)
从遍历树中可以看出,非遍历的边是无法指向自己的祖先节点(即BFS遍历树不存在后向边),而查找桥的算法恰恰就是使用了后向边的性质,而在BFS遍历树中并不存在该性质,所以查找桥只可以用DFS遍历
- 横叉边:不在遍历树上的边
- 前向边:在遍历树上的边
- 理论分析: BFS是一层一层遍历的,所以所有未访问过的节点只可能访问自己下一层的节点或者同层的节点,不可能访问到祖先节点