JS实现二叉树节点遍历生成数组结构

132 阅读1分钟

朋友面试遇到一个试题如下:

输出 [["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))

试了下正常输入,不知道有没有更好的解法,求大佬指正。