剑指 Offer 32 - II. 从上到下打印二叉树 II

剑指 Offer 32 - II. 从上到下打印二叉树 II

题目描述:

从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。

示例:

给定二叉树: [3,9,20,null,null,15,7],
在这里插入图片描述

返回结果为:
在这里插入图片描述

思路:

从题目中可以看到,本题考察的是二叉树的层序遍历,并且在结果中要体现出“层次”。
稍微改变一下对队列的使用,就可以在遍历过程中体现出层次,大致过程如下:

  1. 初始化 queue,用于存储当前层的节点
  2. 检查 queue 是否为空
    2.1:如果不为空:依次遍历当前 queue 内的所有节点,检查每个节点的左右子节点,将不为空的子节点放入 queue,继续循环
    2.2:如果为空:跳出循环

代码:

var levelOrder = function(root) {
  if (!root) return [];
  // 1. 设置结果集
  const result = [];
  // 2. 设置当前层
  let nowRoot = [root];
  // 3. 广度优先搜索(BFS)
  while (nowRoot.length) {
    // 3.1 设置下一层
    const nextRoot = [];
    // 3.2 设置当前层的值
    const nowResult = [];
    // 3.3 遍历当前层,取值以及添加下一层
    for (let i = 0; i < nowRoot.length; i++) {
      // 3.3.1 添加值
      nowResult.push(nowRoot[i].val);

      // 3.3.2 如果存在左子树
      if (nowRoot[i].left) {
        nextRoot.push(nowRoot[i].left);
      }
      // 3.3.3 如果存在右子树
      if (nowRoot[i].right) {
        nextRoot.push(nowRoot[i].right);
      }
    }
    // 3.4 收集完毕,开始交接
    nowRoot = nextRoot;
    result.push(nowResult);
  }
  // 4. 返回结果
  return result;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值