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

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


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对象的广度优先遍历&深度优先遍历)