102.二叉树的层序遍历
遍历本身很简单,需要考虑的问题是怎么标示每一层,这里可以用迭代和递归两种思路
迭代
- 入队 root ,再入队一个null 表示第 0 层的结束
- 出队 root ,入队左右节点 , 如果出队的是null,说明一层结束,再入队一个 null
- 队列不为空,循环 2 ⚠️ 需要注意的点: 队列最后一项如果不做处理将会一直是null,因此需要增加结束条件
var levelOrder = function(root) {
var que = [root,null]
var res = []
var level = []
if (!root ) return []
while(que.length) {
var node = que.shift()
if (node) {
node.left && que.push(node.left)
node.right && que.push(node.right)
level.push(node.val)
} else {
res.push([...level])
level = []
if(que.length) {
que.push(null)
}
}
}
return res
};递归
递归解法的重点是传递层数作为参数
var levelOrder = function(root) {
var res = []
if (!root) return []
var walk = function (node,index) {
if (!res[index]) res[index] = []
res[index].push(node.val)
node.left && walk(node.left,index + 1)
node.right && walk(node.right,index + 1)
}
walk(root,0)
return res
};步骤如代码所示
- 为所在的层数开辟一个数组空间
- root 加入数组
- 如果存在左节点,或者右节点,继续到1,层数 + 1