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

leetcode-102.png

可以参考 104 111 题
层序遍历,那就是 BFS了,直接套BFS框架即可

BFS

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

上面的代码并不优雅,有点冗余,在处理res以及tmp的过程中,有点太辣眼睛了
下面是优化过后的写法

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

这样子,代码就优雅不少了

DFS

var levelOrder = function (root) {
    if (!root) {
        return []
    }
    let res = []
    var dfs = function (root, level) {
        if (!root) {
            return
        }
        // 初始化 n 层的数组,便于 push 元素到 n 层的数组里面
        // 第 n 层的时候,res的长度应该为 n
        // 例如第 0 层的时候, res里面的长度就为 0 
        // 第 1 层的时候, [[3]], 此时再push []
        // 就成了 [[3], []], 然后就 res[1].push(9)
        // [[3], [9]]
        if (res.length === level) {
            res.push([])
        }
        res[level].push(root.val)
        dfs(root.left, level + 1)
        dfs(root.right, level + 1)
    }
    dfs(root, 0)
    return res
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容