102.Binary_Tree_Level_Order_Traversal

25 年 7 月 2 日 星期三
377 字
2 分钟

102. Binary Tree Level Order Traversal

Screenshot 2026-03-05 at 11.11.00 am
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
}

文章标题:102.Binary_Tree_Level_Order_Traversal

文章作者:Sirui Chen

文章链接:https://blog.siruichen.me/posts/102binary_tree_level_order_traversal[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。