深度优先遍历口诀

    访问根节点
    对根节点的没有访问过的相邻节点挨个进行深度优先遍历
    image.png

    1. // 深度优先遍历口诀
    2. // 访问根节点
    3. // 对根节点的没有访问过的相邻节点挨个进行深度优先遍历
    4. const graph = {
    5. 0: [1, 2],
    6. 1: [2],
    7. 2: [0, 3],
    8. 3: [3]
    9. }
    10. // 深度优先遍历
    11. // 记录哪些节点访问过
    12. // const visited = new Set()
    13. // const dfs = (n) => {
    14. // console.log(n); // 2 0 1 3
    15. // // 对没有访问的深度优先遍历
    16. // visited.add(n);
    17. // graph[n].forEach((c) => {
    18. // if(!visited.has(c)) {
    19. // dfs(c)
    20. // }
    21. // })
    22. // }
    23. // dfs(2);
    24. // 广度优先遍历
    25. // 新建一个队列,把根节点入队
    26. // 把队头出队并访问
    27. // 把队头的没访问过的相邻节点入队
    28. // 重读2,3,直到队列为空
    29. const visited = new Set()
    30. const q = [2];
    31. visited.add(2);
    32. while(q.length) {
    33. const n = q.shift();
    34. console.log(n);
    35. graph[n].forEach((c) => {
    36. if(!visited.has(c)) {
    37. q.push(c);
    38. visited.add(c);
    39. }
    40. })
    41. }