美文网首页
js对象的广度优先遍历&深度优先遍历

js对象的广度优先遍历&深度优先遍历

作者: 七八七七 | 来源:发表于2018-10-15 22:00 被阅读0次

    这可以算是一道题目吧,我平时也很少做有关前端面试的题(因为。。。不想动脑呗,还用说吗?)
    哈哈,这两天工作闲一点就把这个做了一下,不知道做的咋样,不过目前我也就这水平了。
    先说题目:


    WechatIMG1091.jpeg

    var data = [
    {
    value: '1',
    children: [
    {
    value: '1-1',
    children: [
    {
    value: '1-1-1'
    },
    {
    value: '1-1-2'
    }
    ]
    },
    {
    value: '1-2',
    children: [
    {
    value: '1-2-1'
    }
    ]
    }
    ]
    },
    {
    value: '2'
    },
    {
    value: '3',
    children: [
    {
    value: '3-1'
    },
    {
    value: '3-2',
    children: [
    {
    value: '3-2-1'
    },
    {
    value: '3-2-2'
    }
    ]
    }
    ]
    }
    ];
    广度优先遍历: 次序依次是 A> B,C> DE > FGH > I
    深度优先遍历: 次序依次是A >B >D > EI > C > F> G> H
    建议1:没做过的同学别看答案, 先自己尝试一下;
    建议2:先做深度优先遍历(because easy), 再做深度优先遍历;
    答案:
    /**深度优先遍历 */
    var result = [];
    circle(data);
    function circle(data) {
    data.forEach(function (v) {
    if (v.value) {
    result.push(v.value);
    }
    if (v.children) {
    circle(v.children);
    }
    })
    };
    console.log(result);

    /**广度优先遍历 */
    var result = [];
    circle(data);
    function circle(data) {
    let tempArr = [];
    data.forEach((v) => {
    if (v.value) {
    result.push(v.value);
    }
    if (v.children) {
    tempArr = tempArr.concat(v.children);
    }
    });
    if (tempArr.length > 0) {
    anotherScope(tempArr);
    }
    }

    function anotherScope(arr) {
    circle(arr);
    }
    console.log(result);

    有不对的地方欢迎指正, 没看懂的同学可以评论问我

    相关文章

      网友评论

          本文标题:js对象的广度优先遍历&深度优先遍历

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