深度优先遍算法口诀
- 访问根节点
- 对根节点的没有访问过的降临节点进行深度优先遍历
const graph = {
0:[1,2],
1:[2],
2:[0,3],
3:[3]
}
const visited = new Set()
const dfs = (n) =>{
console.log(n)
visited.add(n)
graph[n].forEach(c => {
if (!visited.has(c)){
dfs(c)
}
});
}
dfs(2)//2 0 1 3
广度优先遍历算法口诀
- 新建一个队列,把根节点入队
- 把队头出队并访问
- 把对头的没有访问过的相邻节点入队
- 重复第二 三步,直到队列为空
const graph = {
0: [1, 2],
1: [2],
2: [0, 3],
3: [3]
}
const visited = new Set() //哈希表
visited.add(2) // 起始点 先添加进验证是否访问过的哈希表
const q = [2]; // 起始点先入队
while (q.length) {
const n = q.shift(); // 出队 并访问
console.log(n) // 2 0 3 1
graph[n].forEach(c => {
if (!visited.has(c)) {
q.push(c) //没有访问过的节点 入队
visited.add(c); // 访问过的节点进入 哈希表
}
});
}