102. Binary Tree Level Order Traversal

js
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number[][]}
*/
/**
* 二叉树的层序遍历(广度优先遍历)
* @param {TreeNode} root - 二叉树的根节点
* @returns {number[][]} - 按层存储的节点值二维数组,每一层对应一个子数组
*/
var levelOrder = function (root) {
// 边界条件:如果根节点为空,直接返回空数组
if (root === null) {
return []
}
// 最终结果数组,用于存储每一层的节点值
const ans = []
// 当前层的节点队列,初始时包含根节点
let cur = [root]
// 只要当前层还有节点,就继续遍历
while (cur.length) {
// 存储下一层的节点
const nxt = []
// 存储当前层的节点值
const vals = []
// 遍历当前层的所有节点
for (const node of cur) {
// 将当前节点的值存入vals数组
vals.push(node.val)
// 如果当前节点有左子节点,加入下一层节点队列
if (node.left) nxt.push(node.left)
// 如果当前节点有右子节点,加入下一层节点队列
if (node.right) nxt.push(node.right)
}
// 将当前层处理完毕后,把下一层节点队列赋值给cur,进入下一轮循环
cur = nxt
// 将当前层的节点值数组存入最终结果数组
ans.push(vals)
}
// 返回按层遍历的结果
return ans
}