• 剑指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

  • 相关阅读:
    Flask的部署
    server 08 R2 NBL 报错:RPC 服务器在指定计算机上不可用
    Exchange 2010 打补丁的顺序
    批量创建域账号
    Exchange 正版化 授权
    邮件本地备份策略原则
    TMG 模拟公司网络架构要点
    webservice 测试地址
    PYDay10&11&12&13-常用模块:time|datetime|os|sys|pickle|json|xml|shutil|logging|paramiko、configparser、字符串格式化、py自动全局变量、生成器迭代器
    Python 编程要求
  • 原文地址:https://www.cnblogs.com/wxwhnu/p/11434562.html
Copyright © 2020-2023  润新知