js有关深度优先遍历和广度优先遍历

1.Ai智能回答

 深度优先遍历广度优先遍历是图论中两种基本的遍历算法,‌它们分别以不同的方式遍历图中的所有顶点。‌

    深度优先遍历(‌DFS)‌是一种用于遍历或搜索树或图的算法。‌这个算法会尽可能深地搜索图的分支。‌在图中,‌这个算法用来标记已访问和未访问的顶点。‌当节点v被访问时,‌DFS会递归地访问所有从v出发的边所指向的未被访问的顶点。‌当节点v的所有边都已访问,‌或者没有未被访问的边时,‌DFS会回溯到发现节点v的节点,‌继续搜索其他路径。‌这种遍历方法尽可能地往深处探索,‌直到达到某个终点,‌然后再回溯并探索其他路径12。‌

    广度优先遍历(‌BFS)‌则是另一种图遍历算法,‌它从图的某一节点(‌源或起始节点)‌出发,‌探索所有相邻的节点,‌然后对这些相邻节点的未被访问的邻接节点进行探索,‌直到所有可达的节点都被访问。‌BFS按层次顺序进行搜索,‌首先访问离起始节点最近的节点,‌然后逐渐向外扩展到更远的节点。‌这种方法适合于寻找从起点到图中其他所有节点的最短路径14。‌

    这两种遍历方法各有其应用场景和优势。‌深度优先遍历适合用于寻找图中是否存在环或者特定路径的情况,‌而广度优先遍历则更适合于寻找最短路径或者需要遍历图中所有可达节点的情况。‌

2.js使用两种遍历实现

定义简单树

let queue  = [
        {
            label:'1',
            children:[
                {
                    label:'2-1',
                    children:[
                        {
                            label:'2-1-1',
                            children:[
                                {
                                    label:'2-1-1-1'
                                }
                            ]
                        },
                        {
                            label:'2-1-2',
                            children:[
                                {
                                    label:'2-1-2-1'
                                },
                                {
                                    label:'2-1-2-2'
                                }
                            ]
                        },
                        {
                            label:'2-1-3'
                        }
                    ]
                },
                {
                    label:'2-2'
                },
                {
                    label:'2-3',
                    children:[
                        {
                            label:'2-3-1'
                        },
                        {
                            label:'2-3-2'
                        }
                    ]
                }
            ]
        }
    ]

2.1 深度优先遍历


    // 深度优先
    function dfs(arg) {
    arg.forEach((node) => {
        console.log(node.label);
        node.children && depth(node.children);
     });
    }
    dfs(queue)

打印

2.1 广度优先遍历


    
    // 广度优先遍历
    function dfs(arg) {
        for (let i = 0; i < arg.length; i++) {
          console.log(arg[i].label);
          if (arg[i].children) {
            arg = arg.concat(arg[i].children);
          }
        }
    }
    dfs(queue)

打印

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 01:46:03       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 01:46:03       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 01:46:03       45 阅读
  4. Python语言-面向对象

    2024-07-20 01:46:03       55 阅读

热门阅读

  1. 【机器学习】无监督学习和自监督学习

    2024-07-20 01:46:03       15 阅读
  2. 智能机器人学术会议

    2024-07-20 01:46:03       18 阅读
  3. websocket-react使用

    2024-07-20 01:46:03       14 阅读
  4. React开发小tips

    2024-07-20 01:46:03       15 阅读
  5. 求解,T480717 value

    2024-07-20 01:46:03       18 阅读
  6. 离散型以及连续型随机变量

    2024-07-20 01:46:03       16 阅读
  7. Ubuntu网络服务管理

    2024-07-20 01:46:03       15 阅读
  8. 智能合约的重入攻击

    2024-07-20 01:46:03       15 阅读
  9. 第一篇:VUE介绍

    2024-07-20 01:46:03       20 阅读