深度优先遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const graph = {
0: [1, 2],
1: [2],
2: [0, 3],
3: [3]
}

let visited = new Set() // 存储已经被访问数据
const dfs = (n) => {
console.log(n)
visited.add(n)
graph[n].forEach(e => {
if (!visited.has(e)) {
dfs(e) // 未访问数据继续递归
}
})
}

dfs(2) // 确定起点

广度优先遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
let visited = new Set() // 存储已经被访问过的数据
visited.add(2) // 增加起点值
let q = [2] // 设定起点
while (q.length) {
let n = q.shift() // 弹出开头的
console.log(n);
graph[n].map(e => {
if (!visited.has(e)) { // 不存在才遍历节点
q.push(e)
visited.add(e)
}
})
}