朋友面试遇到一个试题如下:
输出 [["F","C","A"],["F","C","D"],["F","C","D","B"],["F","E","H"],["F","E","G"],["F","E","G","M"]] 格式数组,问如何实现?现场敲代码
实现了两版,第二版摸鱼抽空理了下思路,简单了些。
// 定义数据格式
let nodes = {
val: 'F',
l: {
val: 'C',
l: {
val: 'A'
},
r: {
val: 'D',
l: {
val: 'B'
}
}
},
r: {
val: 'E',
l: {
val: 'H'
},
r: {
val: 'G',
l: {
val: 'M'
}
}
}
}
console.log(nodes)
// 处理数据
let res = []
function f(node) {
if(!node.val) {
console.log('数据结构异常!')
return false;
}
if(!node.l || !node.r) {
res.push([...(node.arr || []), node.val])
}
if(node.l) {
f(Object.assign(node.l,{
arr: [...(node.arr || []), node.val]
}))
}
if(node.r) {
f(Object.assign(node.r,{
arr: [...(node.arr || []), node.val]
}))
}
}
// 执行
f(nodes)
// 输出
console.log(JSON.stringify(res))
试了下正常输入,不知道有没有更好的解法,求大佬指正。