广度优先遍历 BFS
解题思路
与 leetcode🧑💻 102. 二叉树的层序遍历 题遍历方式一致;
leetcode🧑💻 102. 二叉树的层序遍历 是自上而下将每一层的数据 push 到 res 中;
此题是自下而上将每一层的数据 unshift 到 res 中;
复杂度
-
时间复杂度:每个点进队出队各一次,故渐进时间复杂度为
O(n)
; -
空间复杂度:队列中元素的个数不超过 n 个,故渐进空间复杂度为
O(n)
;
代码实现
var levelOrderBottom = function (root) {
if (root === null) return [];
const res = [];
const queue = [root]; // 声明队列用于存储后续数据
// 遍历队列
while (queue.length) {
let curLevel = []; // 针对本轮操作,创建一个数组
let len = queue.length; // 一层的数据量
while (len--) {
// 将本次操作的结点出队
const node = queue.shift();
curLevel.push(node.val);
// 检测是否存在左右子结点,如果有,入队即可
node.left && queue.push(node.left);
node.right && queue.push(node.right);
}
res.unshift(curLevel);
}
return res;
};
leetcode🧑💻 102. 二叉树的层序遍历
上一篇