leetcode 4 | 刷题打卡

122 阅读1分钟

题目描述

从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。

 

例如:
给定二叉树: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7
返回其层次遍历结果:

[
  [3],
  [9,20],
  [15,7]
]

提示:

节点总数 <= 1000

思路分析

方法有两种:
1.一种是借助队列的方式进行层序遍历(BFS)
2.另外一种是递归的方式进行遍历(DFS)

AC代码

var levelOrder = function(root) {
    if(!root) {
        return []
    }

    let resArr = []
    let queue = [root]
    while(queue.length) {
        let len = queue.length
        let layerArr = []
        while(len--) {
            let node = queue.shift()
            layerArr.push(node.val)
            node.left && queue.push(node.left)
            node.right && queue.push(node.right)
        }
        resArr.push(layerArr)
    }

    return resArr
};
var levelOrder = function(root) { 
    let resArr = []
    
    const dfs = (root, depth) => {
        if(!root) return

        !resArr[depth] && resArr.push([])
        resArr[depth].push(root.val)

        dfs(root.left, depth + 1)
        dfs(root.right, depth + 1)
    }

    dfs(root, 0)
    return resArr
}

总结

需要层序遍历的场景如果用递归的方式,那就需要全局变量来帮助。