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

posted @ 2019-08-30 13:41  wxwreal  阅读(191)  评论(0编辑  收藏  举报