美文网首页
js广度优先和深度优先

js广度优先和深度优先

作者: oh_flying | 来源:发表于2022-05-22 23:46 被阅读0次

    今天面试,有个算法题,说用广度优先的算法,打印出节点的值。
    首先说明一下什么是广度优先,什么是深度优先,举个例子来说,广度就是横向发展,和我们程序员一样,就是先全栈横向发展,等都会了,再一个一个往深了学,也就是一层一层的学。深度就是纵向发展,就是比如说,你先学js,把js精通了,然后是html,也精通了,最后再学css,也学精通了,就算完成了。对于程序员来说,我感觉深度和广度要结合着来,自己要把握好一个度。
    对于算法来说,就要么深度遍历,要么广度遍历。算法这块我后面应该会系统的更新一下,所以这篇就完全记录一下自己今天遇到的面试题,数据结构和算法网盘接下来要系统的学一下,也会及时更新一下博客的。
    首先数据是这样子的:

    const data = [
        {name:'中国', 
        children:[
            {name:'北京',
            children:[
                {name:'海淀'}
            ]},
            {
                name:'浙江',
                children:[
                    {name:'杭州'}
                ]
            }
        ]}
    ]
    

    广度要求输出:[ '中国', '北京', '浙江', '海淀', '杭州' ]
    深度要求输出:[ '中国', '北京', '海淀', '浙江','杭州' ]
    首先看看广度优先的实现方式,这个不是最优解,以后会更新其他实现方式:

    function guangdu(node) {
        let res = []
        let arr = node
        while(arr.length > 0) {
            [...arr].forEach(item => {
                res.push(item.name)
                item.children && arr.push(...item.children)
                arr.shift()
            })
        }
        return res
    }
    

    接下来看看深度优先的实现方式:

    function shendu(data) {
        const res = []
        data.forEach(item => {
            let map = data => {
                res.push(data.name)
                data.children && data.children.forEach(item => map(item))
            }
            map(item)
        })
        return res
    }
    个人觉得深度比较难理解一点,广度比较好理解一点。

    相关文章

      网友评论

          本文标题:js广度优先和深度优先

          本文链接:https://www.haomeiwen.com/subject/oavlprtx.html