hello-algo/docs/chapter_graph/graph_traversal.md
2023-02-13 16:20:08 +08:00

31 lines
No EOL
1.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
comments: true
---
# 图的遍历
与遍历树类似,遍历图也需要通过搜索算法来实现,并也可根据遍历顺序来分为「广度优先遍历 Breadth-First Traversal」和「深度优先遍历 Depth-First Travsersal」简称分别为 BFS 和 DFS 。
!!! tip 「树」与「图」的关系
本质上,可以把树看作是图的一种特例,即树是一种限制条件下的图。
## 广度优先遍历
广度优先遍历BFS代表一种优先遍历最近的顶点、一层层向外扩张的遍历方式。具体来看从某个顶点出发则优先遍历该顶点的所有邻接顶点随后遍历下个顶点的所有邻接顶点以此类推……
(图)
BFS 常借助「队列」来实现,队列具有“先入先出”的性质,这与 BFS 的“由近及远”的遍历方式是异曲同工的。具体地,在每轮迭代中弹出队首顶点且访问之,并将该顶点的所有邻接顶点加入到队列尾部,直到所有顶点访问完成即可。
为了防止重复遍历顶点,我们需要借助一个 HashSet 来记录哪些结点已被访问,从而避免走“回头路”。
```java
```
## 深度优先遍历
深度优先遍历DFS代表一种优先走到底无路可走再回头的遍历方式。从某个顶点出发首先不断地通过指针向下一个顶点遍历直到走到头开始回溯再继续走到底 + 回溯,以此类推……