【leetcode】102.二叉树的层序遍历

47 阅读1分钟

leetcode-102.png

题目简述:树的层序遍历
对于这种题目,一般来说就有两种解法了,BFS以及DFS BFS也是一套模板,比较通用
DFS在这里的解法,就会有点非主流的感觉,但是代码层面上面来说,应该不太难懂

BFS

var levelOrder = function (root) {
    if (!root) return []
    let res = []
    let queue = [root]
    while (queue.length) {
        let size = queue.length
        let level = []
        for (let i = 0; i < size; ++i) {
            let node = queue.shift()
            level.push(node.val)
            if (node.left) queue.push(node.left)
            if (node.right) queue.push(node.right)
        }
        res.push(level)
    }
    return res
};

DFS

var levelOrder = function (root) {
    if (!root) return []
    let res = []
    var dfs = function (level, node) {
        if (!node) return
        // 初始化 n 层的数组,便于 push 元素到 n 层的数组里面
        // 第 n 层的时候,res的长度应该为 n
        // 例如第 0 层的时候, res里面的长度就为 0 
        // 第 1 层的时候, [[3]], 此时再push []
        // 就成了 [[3], []], 然后就 res[1].push(9)
        // [[3], [9]]
        if (level >= res.length) {
            res.push([])
        }
        res[level].push(node.val)
        dfs(level + 1, node.left)
        dfs(level + 1, node.right)
    }
    dfs(0, root)
    return res
};