模拟数据
// 模拟数据
let msg = [
{
name: 1,
children: [
{
name: '1-1',
children: [
{
name: '1-1-1'
},
{
name: '1-1-2'
}
]
}
]
},
{
name: 2,
children:[
{
name: '2-1'
},
{
name: '2-2'
}
]
}
]
1.深度优先遍历之递归
// 深度优先遍历
function deepTraversal(msg,data = []) {
if (msg != null) {
for(let i = 0; i < msg.length; i++) {
data.push(msg[i])
msg[i].children && deepTraversal(msg[i].children, data);
}
}
return data
}
let data = deepTraversal(msg);
console.log(data);
2. 广度优先算法之递归
// 广度优先遍历的递归写法
function wideTraversal (msg, data = []) {
let nowData = [];
if (msg != null) {
for(let i = 0; i < msg.length; i++) {
data.push(msg[i]);
msg[i].children && nowData.push(...msg[i].children);
msg.length == (i + 1) && wideTraversal(nowData, data);
}
}
return data
}
let data = wideTraversal(msg);
console.log(data);
非递归算法
// 深度优先遍历
function deepTraversal(msg, data=[]) {
let currentData =[];
if (data != null) {
currentData.push(...msg);
while(currentData != 0){
let item = currentData.shift();
data.push(item);
console.log(item)
if (item.children) {
for(let i = 0; i < item.children.length; i++) {
currentData.unshift(item.children[i])
}
}
}
}
return data
}
let data = deepTraversal(msg);
console.log(data);