解题步骤
- 层序遍历其实就是广度优先遍历
- 广度优先遍历二叉树
- 遍历过程中,记录每个节点的层级,并将其添加到不同的数组中
通过广度优先遍历实现
- 时间复杂度:O (n)
空间复杂度:O (n)
function levelOrder(root) {
if (!root) return [];
const q = [root];
const res = [];
while (q.length) {
let len = q.length;
res.push([]);
while (len--) {
const n = q.shift();
res[res.length - 1].push(n.val);
if (n.left) q.push(n.left);
if (n.right) q.push(n.right);
}
}
return res;
}
上方代码中虽然有两层循环,但是第一层循环几乎没有做任何事情,都是由第二层循环去执行操作,所以时间复杂度为 O (n) n 为节点的个数。代码中使用了队列 q,在最坏的情况下队列会存放所有的元素,所以空间复杂度也是 O (n)。