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)

打印

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值