题目描述
解题思路
按层打印二叉树,考察的是广度优先遍历,也称宽度优先遍历。
注意最后输出的是二维数组,需要把每一层的结点放入单独数组,最后push进需要返回的数组。
广度优先遍历步骤
- 新建一个队列 queue,把根节点入队;
- 把队头出队并访问 queue.shift();
- 把对头的children挨个入队;
- 重复2,3步,直到队列为空。
Coding
var levelOrder = function(root) {
if(!root) return []
let queue = [root]
let res = []
while(queue.length > 0){
let temp = []
let len = queue.length
for(let i=0;i<len;i++){
let node = queue.shift()
temp.push(node.val)
node.left && queue.push(node.left)
node.right && queue.push(node.right)
}
res.push([...temp])
}
return res
};
注意,for循环时,队列长度取先前定义的值,因为shift()操作会导致queue.length变化。
知识点
队列是先进先出的数据结构。
queue.push(root) //把根节点入队
queue.shift() //[1,2,3] => 1 出队头并返回该值