zoukankan      html  css  js  c++  java
  • 剑指offer60:把二叉树打印成多行。上到下按层打印二叉树。

    1 题目描述

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

    2 思路和方法

      vector变量存储每一层的元素vector<vector<int> > ans;  定义队列queue push front中序遍历每一层的元素,queue.size()判断每一层是否为空,queue<TreeNode*> q; q.push(pRoot);

      队列queue

      push()  pop()  size()  empty()  front()  back()

    1. push()  队列中由于是先进先出,push即在队尾插入一个元素,如:可以输出:Hello World!
    queue<string> q;
    q.push("Hello World!");
    q.push("China");
    cout<<q.front()<<endl;
    1. pop() 将队列中最靠前位置的元素拿掉,是没有返回值的void函数。如:可以输出:China,原因是Hello World!已经被除掉了。
    queue<string> q;
    q.push("Hello World!");
    q.push("China");
    q.pop();
    cout<<q.front()<<endl;
    1. size() 返回队列中元素的个数,返回值类型为unsigned int。如:输出两行,分别为0和2,即队列中元素的个数。
    queue<string> q;
    cout<<q.size()<<endl;
    q.push("Hello World!");
    q.push("China");
    cout<<q.size()<<endl;
    1. empty() 判断队列是否为空的,如果为空则返回true。如:输出为两行,分别是1和0。因为一开始队列是空的,后来插入了两个元素。
    queue<string> q;
    cout<<q.empty()<<endl;
    q.push("Hello World!");
    q.push("China");
    cout<<q.empty()<<endl;
    1. front() 返回值为队列中的第一个元素,也就是最早、最先进入队列的元素。如:输出值为两行,分别是Hello World!和China。只有在使用了pop以后,队列中的最早进入元素才会被剔除。
    queue<string> q;
    q.push("Hello World!");
    q.push("China");
    cout<<q.front()<<endl;
    q.pop();
    cout<<q.front()<<endl
    1. back() 返回队列中最后一个元素,也就是最晚进去的元素。如:输出值为China,因为它是最后进去的。这里back仅仅是返回最后一个元素,并没有将该元素从队列剔除掉。
    queue<string> q;
    q.push("Hello World!");
    q.push("China");
    cout<<q.back()<<endl;

    3 C++核心代码

     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> > ans;
    15             if(pRoot == NULL) 
    16                 return ans;
    17             queue<TreeNode*> q;
    18             q.push(pRoot);
    19             while(!q.empty()){
    20                 int size = q.size();//读取每一层的元素的数量,queue的size()函数返回队列中元素的个数,返回值类型为unsigned int
    21                 vector<int> levelelem;
    22                 while(size--){
    23                     TreeNode* t = q.front();//返回值为队列中的第一个元素,也就是最早、最先进入队列的元素。
    24                     q.pop();
    25                     levelelem.push_back(t->val);
    26                     if(t->left != NULL) q.push(t->left);
    27                     if(t->right != NULL) q.push(t->right);
    28                 }
    29                 ans.push_back(levelelem);
    30             }
    31             return ans;
    32         }
    33 };
    View Code

    参考资料

    https://blog.csdn.net/zjwreal/article/category/8762404

    https://blog.csdn.net/ZHLZYF/article/details/83280481

  • 相关阅读:
    【2018.05.05 C与C++基础】C++中的自动废料收集:概念与问题引入
    【2018.04.27 C与C++基础】关于switch-case及if-else的效率问题
    【2018.04.19 ROS机器人操作系统】机器人控制:运动规划、路径规划及轨迹规划简介之一
    March 11th, 2018 Week 11th Sunday
    March 10th, 2018 Week 10th Saturday
    March 09th, 2018 Week 10th Friday
    March 08th, 2018 Week 10th Thursday
    March 07th, 2018 Week 10th Wednesday
    ubantu之Git使用
    AMS分析 -- 启动过程
  • 原文地址:https://www.cnblogs.com/wxwhnu/p/11434562.html
Copyright © 2011-2022 走看看