考点:二叉树层序遍历
题目
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
思路
参考题解,由于结果需要将每一层的节点值单独放在一个数组中,所以在出队入队之外还需要判断当前队列元素的层级。
var levelOrder = function(root) {
if(!root) return [];
const queue = [root]; // 队列
const res = [[root.val]]; // 结果数组
let cur = 1; // 当前层级(因为0层是root所以从1开始)
while(queue.length !== 0) {
res.push([]); // 预留当前层级的结果数组
const n = queue.length; // 保存当前队列长度,这代表着某层节点数量
// 遍历这个数量的节点,将节点值保存到结果数组中
for(let i = 0; i < n; i++) {
const node = queue.shift(); // 当前层元素逐渐出队
// 如果有左节点,则入队,同时将这个值计入结果中
// 右节点同理
if(node.left) {
queue.push(node.left);
res[cur].push(node.left.val);
}
if(node.right) {
queue.push(node.right);
res[cur].push(node.right.val);
}
}
层级自增
cur++;
}
// 最后会多一个空的数组,弹出去
res.pop();
return res;
};