zoukankan      html  css  js  c++  java
  • 剑指offer(60)把二叉树打印成多行

    题目描述

    从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

    题目分析

    从上到下打印二叉树我们知道用队列可以实现,但是如果多行打印怎么做呢?

    我们需要分割,在行与行之间进行分割。如何分割呢?肯定要知道个数才能分割。

    可是我又如何知道这一行有多少个呢?

    这就是重点了,我们可以通过遍历上一层,通过它们的子树就可以知道这一层有多少个节点了。

    当然我们还需要有一个变量来记录这一层已经打印了多少个节点了。

    所以我们需要一个队列+两个个变量。

    代码

    function Print(pRoot) {
      const queue = [],
        res = [];
      if (pRoot === null) {
        return res;
      }
      queue.push(pRoot);
      let nextLevel = 0; // 下一层节点个数
      let toBePrinted = 1; // 这一层还有多少个节点要打印
      let list = []; // 存放每一层节点
      while (queue.length) {
        const pNode = queue.shift();
        list.push(pNode.val);
        if (pNode.left !== null) {
          queue.push(pNode.left);
          nextLevel++;
        }
        if (pNode.right !== null) {
          queue.push(pNode.right);
          nextLevel++;
        }
        toBePrinted--;
        if (toBePrinted === 0) {
          res.push(list);
          list = [];
          toBePrinted = nextLevel;
          nextLevel = 0;
        }
      }
      return res;
    }
  • 相关阅读:
    SQL Server 调优系列基础篇
    SQL Server 调优系列基础篇
    SQL Server 调优系列基础篇
    企业应用架构 客户端 / 服务器
    SQL Server 调优系列基础篇
    SQL Server 调优系列基础篇
    SQL Server 调优系列基础篇
    HL7 2.6 解析(XML)
    .Net程序调试与追踪的一些方法
    实现算法2.17的程序
  • 原文地址:https://www.cnblogs.com/wuguanglin/p/Print2.html
Copyright © 2011-2022 走看看