题目描述
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: [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
}
总结
需要层序遍历的场景如果用递归的方式,那就需要全局变量来帮助。