今天面試,有個(gè)算法題取视,說(shuō)用廣度優(yōu)先的算法硝皂,打印出節(jié)點(diǎn)的值。
首先說(shuō)明一下什么是廣度優(yōu)先作谭,什么是深度優(yōu)先稽物,舉個(gè)例子來(lái)說(shuō),廣度就是橫向發(fā)展折欠,和我們程序員一樣贝或,就是先全棧橫向發(fā)展,等都會(huì)了锐秦,再一個(gè)一個(gè)往深了學(xué)咪奖,也就是一層一層的學(xué)。深度就是縱向發(fā)展酱床,就是比如說(shuō)羊赵,你先學(xué)js,把js精通了扇谣,然后是html昧捷,也精通了揖闸,最后再學(xué)css,也學(xué)精通了料身,就算完成了汤纸。對(duì)于程序員來(lái)說(shuō),我感覺(jué)深度和廣度要結(jié)合著來(lái)芹血,自己要把握好一個(gè)度贮泞。
對(duì)于算法來(lái)說(shuō),就要么深度遍歷幔烛,要么廣度遍歷啃擦。算法這塊我后面應(yīng)該會(huì)系統(tǒng)的更新一下,所以這篇就完全記錄一下自己今天遇到的面試題饿悬,數(shù)據(jù)結(jié)構(gòu)和算法網(wǎng)盤(pán)接下來(lái)要系統(tǒng)的學(xué)一下令蛉,也會(huì)及時(shí)更新一下博客的。
首先數(shù)據(jù)是這樣子的:
const data = [
{name:'中國(guó)',
children:[
{name:'北京',
children:[
{name:'海淀'}
]},
{
name:'浙江',
children:[
{name:'杭州'}
]
}
]}
]
廣度要求輸出:[ '中國(guó)', '北京', '浙江', '海淀', '杭州' ]
深度要求輸出:[ '中國(guó)', '北京', '海淀', '浙江','杭州' ]
首先看看廣度優(yōu)先的實(shí)現(xiàn)方式狡恬,這個(gè)不是最優(yōu)解珠叔,以后會(huì)更新其他實(shí)現(xiàn)方式:
function guangdu(node) {
let res = []
let arr = node
while(arr.length > 0) {
[...arr].forEach(item => {
res.push(item.name)
item.children && arr.push(...item.children)
arr.shift()
})
}
return res
}
接下來(lái)看看深度優(yōu)先的實(shí)現(xiàn)方式:
function shendu(data) {
const res = []
data.forEach(item => {
let map = data => {
res.push(data.name)
data.children && data.children.forEach(item => map(item))
}
map(item)
})
return res
}
個(gè)人覺(jué)得深度比較難理解一點(diǎn),廣度比較好理解一點(diǎn)弟劲。