剑指offer 面试题. 按之字形顺序打印二叉树
题目描述
方法1:
正常层次遍历,利用普通队列。逢奇数行(从0算起)就把该层结果逆序。
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
if(pRoot==nullptr){return {};}
queue<TreeNode*> my_queue;
my_queue.push(pRoot);
vector<vector<int>>res;
vector<int> vec;
int cnt=;
while(not my_queue.empty()){
vec.clear();
int cur_siz=my_queue.size();
for(int i=;i<cur_siz;++i){
auto cur=my_queue.front();
my_queue.pop();
vec.push_back(cur->val);
if(cur->left){
my_queue.push(cur->left);
}
if(cur->right){
my_queue.push(cur->right);
}
}
if(cnt&){
reverse(vec.begin(),vec.end());
}
res.push_back(vec);
++cnt;
}
return res;
}
};
方法2:
利用双端队列,队列中顺序始终是正常的,但奇数行从右向左遍历,pop右边的,孩子push进左边。偶数行从左向右遍历,pop左边的,孩子push进右边。
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
if(pRoot==nullptr){return {};}
deque<TreeNode*> my_queue;
my_queue.push_back(pRoot);
vector<vector<int>>res;
int cnt=;
while(not my_queue.empty()){
res.push_back({});
int cur_siz=my_queue.size();
decltype(pRoot) cur;
for(int i=;i<cur_siz;++i){
if(cnt&){
cur=my_queue.back();
my_queue.pop_back();
if(cur->right){
my_queue.push_front(cur->right);
}
if(cur->left){
my_queue.push_front(cur->left);
}
}
else{
cur=my_queue.front();
my_queue.pop_front();
if(cur->left){
my_queue.push_back(cur->left);
}
if(cur->right){
my_queue.push_back(cur->right);
}
}
res.back().push_back(cur->val);
}
++cnt;
}
return res;
}
};
剑指offer 面试题. 按之字形顺序打印二叉树的更多相关文章
- 【剑指Offer面试题】 九度OJ1368:二叉树中和为某一值的路径
题目链接地址: http://ac.jobdu.com/problem.php? pid=1368 题目1368:二叉树中和为某一值的路径 时间限制:1 秒内存限制:32 兆特殊判题:否提交:2252 ...
- 剑指 Offer 32 - III. 从上到下打印二叉树 III + 双端队列使用 + 蛇形打印层次遍历序列 + 正倒序输出
剑指 Offer 32 - III. 从上到下打印二叉树 III Offer_32_3 题目详情 题解分析 本题我想的比较复杂,其实题目的要求只是需要遍历的结果逆序和正序交替,这个其实可以使用Coll ...
- 剑指 Offer 32 - III. 从上到下打印二叉树 III
剑指 Offer 32 - III. 从上到下打印二叉树 III 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印, ...
- 剑指 Offer 32 - II. 从上到下打印二叉树 II + 层次遍历二叉树 + 按层存储
剑指 Offer 32 - II. 从上到下打印二叉树 II Offer_32 题目描述: 题解分析: 这道题我一开始想到的解决方法较粗暴,就是使用两个变量来记录当前层的节点数和下一层的结点数. 以上 ...
- 剑指 Offer 32 - I. 从上到下打印二叉树 + 层次遍历二叉树
剑指 Offer 32 - I. 从上到下打印二叉树 Offer_32_1 题目描述 解题思路 这题属于简单题,考察的是我们对二叉树以及层次遍历的方法. 这里只需要使用简单的队列即可完成二叉树的层次遍 ...
- 剑指 Offer 32 - II. 从上到下打印二叉树 II
剑指 Offer 32 - II. 从上到下打印二叉树 II 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 例如: 给定二叉树: [3,9,20,null,null,1 ...
- 剑指 Offer 32 - I. 从上到下打印二叉树
剑指 Offer 32 - I. 从上到下打印二叉树 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 ...
- 每日一题 - 剑指 Offer 32 - III. 从上到下打印二叉树 III
题目信息 时间: 2019-06-25 题目链接:Leetcode tag:双端队列 难易程度:中等 题目描述: 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右 ...
- 剑指Offer:面试题14——调整数组顺序使奇数位于偶数前面(java实现)
问题描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 思路: 1.最简单的想法,不考虑时间复杂度,扫描数组,遇到偶数,先取出这 ...
随机推荐
- PS_0002:改变曲线,改变色阶
1,ctrl + m 改变曲线 2,ctrl + l 改变色阶
- PHP版常用算法
PHP版常用算法最近准备面试的资料,顺便整理一下以前的基本算法,写个DEMO记录一下 //冒泡//逐行对比,满足条件则交换function bubbleSort($arrData,$sort = 'd ...
- Java泛型(T)与通配符?
前言:使用泛型的目的是利用Java编译机制,在编译过程中帮我们检测代码中不规范的有可能导致程序错误的代码.例如,我们都知道list容器可以持有任何类型的数据,所以我们可以把String类型和Integ ...
- C# interact with Command prompt
using System.IO; using System.Diagnostics; static void Main(string[] args) { CmdDemo("dir" ...
- Django---Django返回HTML文件
前面我们简单的了解Django的一些工作原理,其中关于页面展示的内容,也全部都是视图(Views)返回的内容,那么我们也知道前端包括很多内容.如:HTML,CSS,JavaScript等以及各种插件, ...
- wxpython学习:创建最小的空的wxPython程序
frame = wx.Frame(parent=None, title=’Bare’) frame.Show() return True app = App() app.MainLoop() 上面的代 ...
- Disharmony Trees HDU - 3015 树状数组+离散化
#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using ...
- Sass和Scss
Sass:https://www.sass.hk/ Sass是什么 Sass 是一款强化 CSS 的辅助工具,它在 CSS 语法的基础上增加了变量 (variables).嵌套 (nested rul ...
- Android View框架的layout机制
概述 Android中View框架的工作机制中,主要有三个过程: 1.View树的测量(measure) Android View框架的measure机制 2.View树的布局(layout)Andr ...
- unserialize():Error at offset 0 of 96 bytes是什么意思
数据库有个列是数组序列化后存到数据库的,取出来得反序列化, php想要把数组保存到数据库里,有两种序列化方式,分别是: //php系统序列化 $b = serialize($a); //序列化数 ...