其實簡單來講 深度優先就是自上而下的遍歷搜索 廣度優先則是逐層遍歷, 以下圖所示javascript
1.深度優先java
2.廣度優先web
對於算法來講 無非就是時間換空間 空間換時間算法
深度優先採用的是堆棧的形式, 即先進後出
廣度優先則採用的是隊列的形式, 即先進先出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))