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

    题目描述

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

    解题思路

    还是用层序遍历的思想,设置一个队列初始推入根节点,每次删除队列顶的节点时,打印出来结点值,若其有左右子节点,则将左右子节点依次推入队列,如此遍历直到队列为空。

    由于本题要求逐行输出,所以需要设置两个变量来保持分行:needPrint记录当前行仍需打印的节点数,nextLevel记录下一行需要打印的节点数。每打印完一个节点,将当前行剩下的结点数needPrint减1;每向队列放入一个子节点,将下一行的节点数nextLevel加1。打印完节点后若needPrint为0,则说明当前行节点已全部打印完,所以将needPrint设置为下一行的节点数nextLevel,同时将nextLevel置0.

    代码

     1 /*
     2 struct TreeNode {
     3     int val;
     4     struct TreeNode *left;
     5     struct TreeNode *right;
     6     TreeNode(int x) :
     7             val(x), left(NULL), right(NULL) {
     8     }
     9 };
    10 */
    11 class Solution {
    12 public:
    13         vector<vector<int> > Print(TreeNode* pRoot) {
    14             vector<vector<int> > vs;
    15             if(pRoot){
    16                 vector<int> v;
    17                 queue<TreeNode*> q;
    18                 q.push(pRoot);
    19                 int needPrint=1;
    20                 int nextLevel=0;
    21                 while(q.size()){
    22                     TreeNode* node=q.front();
    23                     v.push_back(node->val);
    24                     needPrint--;
    25                     q.pop();
    26                     if(node->left){
    27                         q.push(node->left);
    28                         nextLevel++;
    29                     }
    30                     if(node->right){
    31                         q.push(node->right);
    32                         nextLevel++;
    33                     }
    34                     if(needPrint==0){
    35                         vs.push_back(v);
    36                         v.clear();
    37                         needPrint=nextLevel;
    38                         nextLevel=0;
    39                     }
    40                 }
    41             }
    42             return vs;
    43         }
    44     
    45 };
  • 相关阅读:
    ES(一): 架构及原理
    Durid(二): 数据集及存储
    Durid(一): 原理架构
    【DataBase】H2 DateBase与项目集成
    【DataBase】H2 DateBase的拓展使用
    【Mybatis】MyBatis之插件开发(十)
    【DataBase】H2 DateBase的简单使用
    【DataBase】Hsqldb与项目集成
    【DataBase】Hsqldb的简单使用
    【Mybatis】MyBatis之Generator自动生成代码(九)
  • 原文地址:https://www.cnblogs.com/wmx24/p/8906227.html
Copyright © 2011-2022 走看看