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;
    }
  • 相关阅读:
    pyqt5 树节点点击实现多窗口切换
    pyglet self.
    itchat key
    python队列Queue
    Python建立多线程任务并获取每个线程返回值
    利用Python实现多线程聊天功能
    Python3.5+PyQt5多线程+itchat实现微信防撤回桌面版代码
    pyglet player sound
    文件打开的几种访问模式
    pyglet StaticSource
  • 原文地址:https://www.cnblogs.com/wuguanglin/p/Print2.html
Copyright © 2011-2022 走看看