深度优先遍历不需要记住所有节点,占用空间小;但有回溯的操作,时间会长一点。
第一题 打印出所有的name值
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' }] },
],
}
]
// 声明
const dfs = data => {
data.forEach(item => {
const map = it => {
console.log(it.name)
it.children && it.children.forEach(map)
}
map(item)
})
}
// 执行
dfs(data)
第二题 打印出所有的val值
const tree = {
val: 12,
children: [{
val: 34,
children: [{
val: 134,
children: []
}]
}, {
val: 35,
children: []
}]
}
// 声明
const dfs = root => {
console.log(root.val)
root.children.forEach(dfs)
}
// 执行
dfs(tree)
这两题的区别是一个最外层是数组形式,一个最外层是对象形式。