剑指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()
- push() 队列中由于是先进先出,push即在队尾插入一个元素,如:可以输出:Hello World!
queue<string> q;
q.push("Hello World!");
q.push("China");
cout<<q.front()<<endl;
- pop() 将队列中最靠前位置的元素拿掉,是没有返回值的void函数。如:可以输出:China,原因是Hello World!已经被除掉了。
queue<string> q;
q.push("Hello World!");
q.push("China");
q.pop();
cout<<q.front()<<endl;
- size() 返回队列中元素的个数,返回值类型为unsigned int。如:输出两行,分别为0和2,即队列中元素的个数。
queue<string> q;
cout<<q.size()<<endl;
q.push("Hello World!");
q.push("China");
cout<<q.size()<<endl;
- empty() 判断队列是否为空的,如果为空则返回true。如:输出为两行,分别是1和0。因为一开始队列是空的,后来插入了两个元素。
queue<string> q;
cout<<q.empty()<<endl;
q.push("Hello World!");
q.push("China");
cout<<q.empty()<<endl;
- 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
- back() 返回队列中最后一个元素,也就是最晚进去的元素。如:输出值为China,因为它是最后进去的。这里back仅仅是返回最后一个元素,并没有将该元素从队列剔除掉。
queue<string> q;
q.push("Hello World!");
q.push("China");
cout<<q.back()<<endl;
3 C++核心代码
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int> > ans;
if(pRoot == NULL)
return ans;
queue<TreeNode*> q;
q.push(pRoot);
while(!q.empty()){
int size = q.size();//读取每一层的元素的数量,queue的size()函数返回队列中元素的个数,返回值类型为unsigned int
vector<int> levelelem;
while(size--){
TreeNode* t = q.front();//返回值为队列中的第一个元素,也就是最早、最先进入队列的元素。
q.pop();
levelelem.push_back(t->val);
if(t->left != NULL) q.push(t->left);
if(t->right != NULL) q.push(t->right);
}
ans.push_back(levelelem);
}
return ans;
}
};
参考资料
https://blog.csdn.net/zjwreal/article/category/8762404
https://blog.csdn.net/ZHLZYF/article/details/83280481
剑指offer60:把二叉树打印成多行。上到下按层打印二叉树。的更多相关文章
- 【剑指Offer】面试题32 - II. 从上到下打印二叉树 II
题目 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回 ...
- 《剑指offer》面试题32 - II. 从上到下打印二叉树 II
问题描述 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 ...
- (剑指Offer)面试题23:从上到下打印二叉树
题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 很明显,这是一个广度优先遍历. 需要一个队列容器来保存结点,具体操作: 1.将根结点压入队列中,并打印根结点:如果根结点有子结点 ...
- 【剑指offer】面试题23:从上往下打印二叉树
题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: bfs,队列. 注意,队列最后不要忘了pop(). 代码: /* struct TreeNode { int val; stru ...
- 《剑指offer》— JavaScript(22)从上往下打印二叉树
从上往下打印二叉树 题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路 借助两个辅助队列,一个用来存放结点,一个用来存放结点值: 先将根节点加入到队列中,然后遍历队列中的元素,遍历 ...
- 【剑指Offer】面试题32 - III. 从上到下打印二叉树 III
题目 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推. 例如: 给定二叉树: [3,9,20,nu ...
- 【剑指Offer】面试题32 - I. 从上到下打印二叉树
题目 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回: [3 ...
- 《剑指offer》面试题32 - I. 从上到下打印二叉树
问题描述 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回 ...
- 《剑指offer》面试题32 - III. 从上到下打印二叉树 III
问题描述 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推. 例如: 给定二叉树: [3,9,20, ...
随机推荐
- ros topic 命令
#查看topic频率rostopic hz /xxx_imu_driver/imu #查看topic信息rostopic info /xxx_imu_driver/imu #查看topic数据rost ...
- anzhuang ruanjian
makepkg -i https://github.com/arch4edu/arch4edu/wiki/Add-arch4edu-to-your-Archlinux Add arch4edu to ...
- java读取excel文件数据导入mysql数据库
这是我来公司的第二周的一个小学习任务,下面是实现过程: 1.建立maven工程(方便管理jar包) 在pom.xml导入 jxl,mysql-connector 依赖 可以在maven仓库搜索 2.建 ...
- NSCTF 2017-pwn2
目录 程序基本信息 程序漏洞 整体思路 exp脚本 发现的问题 内容参考 程序基本信息 32位动态链接程序,开启了数据段不可执行以及栈溢出保护 程序漏洞 在函数中sub_80487fa中有一个格式化字 ...
- oracle查询表指定字段类型
查询表某字段类型,如下: SELECT data_type FROM all_tab_cols WHERE table_name = UPPER('SRIS_P_BaseInfo') and colu ...
- PyTorch Tutorials 4 训练一个分类器
%matplotlib inline 训练一个分类器 上一讲中已经看到如何去定义一个神经网络,计算损失值和更新网络的权重. 你现在可能在想下一步. 关于数据? 一般情况下处理图像.文本.音频和视频数据 ...
- Idea 运行测试NoSuchMethodError Junit5
1.背景 环境: macOS 10.13.4 idea: 2016.3 springboot 版本: 2.2.2.RELEASE pom依赖 <dependencies> <depe ...
- java类什么时候加载?,加载类的原理机制是怎么样的?
java类什么时候加载?,加载原理机制是怎么样的? 答: 很多人都不是很清楚java的class类什么时候加载在运行内存中,其实类加载的时间是发生在一下几种情况: 1.实例化对象时,就像sprin ...
- LODOP在页面让客户选择打印机
获取打印机列表可以放在onload事件里,如过当前是使用的c-lodop,由于websoket链接需要时间,一进入页面可能会报错,被准备好或网页没下载完成等,也可以在点击事件里让用户获取打印机.之前写 ...
- 【Leetcode_easy】690. Employee Importance
problem 690. Employee Importance 题意:所有下属和自己的重要度之和,所有下属包括下属的下属即直接下属和间接下属. solution:DFS; /* // Employe ...