其實簡單來講 深度優先就是自上而下的遍歷搜索 廣度優先則是逐層遍歷, 以下圖所示算法
1.深度優先
bash
2.廣度優先
post
對於算法來講 無非就是時間換空間 空間換時間ui
const data = [
{
name: 'a',
children: [
{ name: 'b', children: [{ name: 'e' }] },
{ name: 'c', children: [{ name: 'f' }] },
{ name: 'd', children: [{ name: 'g' }] },
],
},
{
name: 'a2',
children: [
{ name: 'b2', children: [{ name: 'e2' }] },
{ name: 'c2', children: [{ name: 'f2' }] },
{ name: 'd2', children: [{ name: 'g2' }] },
],
}
]
// 深度遍歷, 使用遞歸
function getName(data) {
const result = [];
data.forEach(item => {
const map = data => {
result.push(data.name);
data.children && data.children.forEach(child => map(child));
}
map(item);
})
return result.join(',');
}
// 廣度遍歷, 建立一個執行隊列, 當隊列爲空的時候則結束
function getName2(data) {
let result = [];
let queue = data;
while (queue.length > 0) {
[...queue].forEach(child => {
queue.shift();
result.push(child.name);
child.children && (queue.push(...child.children));
});
}
return result.join(',');
}
console.log(getName(data))
console.log(getName2(data))複製代碼
本文來源於:juejin.im/post/5c4a96…
spa
堆棧
的形式, 即先進後出
隊列
的形式, 即先進先出
(相似於平常中的排隊)