Q:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

A:BFS,偶数层reverse

    vector<vector<int> > Print(TreeNode *pRoot) {
vector<vector<int> > result;
if (pRoot == nullptr)
return result;
bool rever = false;
TreeNode *temp;
queue<TreeNode *> queue;
queue.push(pRoot);
int count = 1;
vector<int> temp0;
while (!queue.empty()) {
while (count-- != 0) {
temp = queue.front();
temp0.push_back(temp->val);
queue.pop();
if (temp->left)
queue.push(temp->left);
if (temp->right)
queue.push(temp->right);
}
count = queue.size();
if (!rever) {
rever = true;
} else {
reverse(temp0.begin(), temp0.end());
rever = false;
}
result.push_back(temp0);
temp0.clear();
}
return result;
}

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

A:BFS,比上面还简单,不用reverse(摊手)

vector<vector<int> > Print(TreeNode *pRoot) {
vector<vector<int> > result;
if (pRoot == nullptr)
return result;
bool rever = false;
TreeNode *temp;
queue<TreeNode *> queue;
queue.push(pRoot);
int count = 1;
vector<int> temp0;
while (!queue.empty()) {
while (count-- != 0) {
temp = queue.front();
temp0.push_back(temp->val);
queue.pop();
if (temp->left)
queue.push(temp->left);
if (temp->right)
queue.push(temp->right);
}
count = queue.size();
result.push_back(temp0);
temp0.clear();
}
return result;
}

Q:给定一个二叉树,返回该二叉树由底层到顶层的层序遍历,(从左向右,从叶子节点到根节点,一层一层的遍历)

例如:

给定的二叉树是{3,9,20,#,#,15,7},

3↵ / ↵ 9 20↵ / ↵ 15 7

该二叉树由底层到顶层层序遍历的结果是

[↵ [15,7]↵ [9,20],↵ [3],↵]

如果你不清楚“{1,#,2,3}"的含义的话,请继续阅读

OJ用这样的方法将二叉树序列化:

二叉树的序列化遵循层序遍历的原则,”#“代表该位置是一条路径的终结,下面不再存在结点。

例如:

1↵ / ↵ 2 3↵ /↵ 4↵ ↵ 5

上述的二叉树序列化的结果是:"{1,2,3,#,#,4,#,#,5}".

A:层序遍历,每次添加到0的位置上

    public ArrayList<ArrayList<Integer>> levelOrderBottom(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<TreeNode>();
ArrayList<ArrayList<Integer>> wrapList = new ArrayList<ArrayList<Integer>>(); if(root == null) return wrapList; queue.offer(root);
while(!queue.isEmpty()){
int levelNum = queue.size();
ArrayList<Integer> subList = new ArrayList<Integer>();
for(int i=0; i<levelNum; i++) {
if(queue.peek().left != null) queue.offer(queue.peek().left);
if(queue.peek().right != null) queue.offer(queue.peek().right);
subList.add(queue.poll().val);
}
//每次将结果保存到下标为0的位置
wrapList.add(0, subList);
}
return wrapList;
}

剑指offer系列——59/60.按之字形顺序打印二叉树/把二叉树打印成多行的更多相关文章

  1. 【剑指Offer】59、按之字形顺序打印二叉树

      题目描述:   请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推.   解题思路:   这道题仍然是二 ...

  2. 剑指offer(59)按之字形顺序打印二叉树

    题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 题目分析 这道题还是需要画图分析,不然不好找 ...

  3. 干货 | 剑指offer系列文章汇总

    下面是名企面试中经常会出现的面试题目,大家可以戳相应的题目查看题目细节,其答案会在紧接着的后一篇中出现  剑指offer系列  始 剑指offer—灯管问题(1)  剑指offer—10人电梯(2)  ...

  4. 【剑指offer】59 - I. 滑动窗口的最大值

    剑指 Offer 59 - I. 滑动窗口的最大值 知识点:队列:滑动窗口:单调 题目描述 给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值. 示例 输入: nums = [ ...

  5. 7、斐波那契数列、跳台阶、变态跳台阶、矩形覆盖------------>剑指offer系列

    题目:斐波那契数列 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). f(n) = f(n-1) + f(n-2) 基本思路 这道题在剑指offe ...

  6. 【剑指Offer面试编程题】题目1523:从上往下打印二叉树--九度OJ

    题目描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第一行一个整数n(1<=n<=1000, ...

  7. 剑指 Offer 33. 二叉搜索树的后序遍历序列 + 根据二叉树的后序遍历序列判断对应的二叉树是否存在

    剑指 Offer 33. 二叉搜索树的后序遍历序列 Offer_33 题目详情 题解分析 本题需要注意的是,这是基于一颗二叉排序树的题目,根据排序二叉树的定义,中序遍历序列就是数据从小到大的排序序列. ...

  8. 剑指offer系列26--正则表达式匹配

    [题目]请实现一个函数用来匹配包括’.’和’*‘的正则表达式.模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式.例 ...

  9. 剑指offer系列62---两个链表的公共结点

    [题目]输入两个链表,找出它们的第一个公共结点. * [思路]1 获取两链表的长度: * 2 让长的链表先走n步后此时走到短链表起始位置: * 3 两链表同时遍历,直至相同,这时返回第一个公共结点. ...

随机推荐

  1. 我眼中的ASP.NET.MVC

    MVC MVC全名 : Model View Controller ( Model-模型 View-视图  Controller-控制器)是一种经典的,经久不衰的,屹立不倒的软件设计框架.实现了业务逻 ...

  2. Java中顺序、并行与并发

    顺序(sequential)用于表示多个操作依次处理.例如把十个操作交给一个人处理 并行(parallel)用于表示多个操作同时处理.比如是个操作分给两个人操作,两个人会并行处理 并发(concurr ...

  3. .net生成PDF文件的几种方式

    以下为在.net mvc中,生成pdf的几种方式,资料都是在做项目时网上找的 1.使用Microsoft.Office.Interop.Word.dll将word转换为PDF dll可以单独下载,一般 ...

  4. vue-infinite-loading 过滤器tab正确使用

    业务逻辑涉及loadmore,filter和tab切换,框架是vue,使用vue-infinite-loading中的一点经历. identifier 一开始并没有重视这个参数,只是他的官网说iden ...

  5. private、public、this关键字

    private关键字 概念:私有的,一种权限修饰符,用来修饰类的成员 特点:被修饰的成员只能在本类中访问 用法: - 1. private 数据类型 变量名: - 2. private 返回值类型 方 ...

  6. 微信小程序-骰子游戏2

    这是截图,类似与eclipse 的web 开发. 主界面可以自己编写程序. 可以压大压小等等,过年回家聚会的时候可以试试....

  7. javascript 问题汇总(1)

    1    jquery ajax提交有参数的请求,提示错误“Unsupported Media Type“ 解决:ajax 设置添加  contentType: "application/j ...

  8. codechef Future of draughts

    难度 super-hard 题意 官方中文题意 做法 定义1:\(G\)为邻接矩阵,\(I\)为单位矩阵 定义2:\(H\)为转移矩阵,可以不动,即\(H=G+I\) 定义3:\(e_i(x_1,.. ...

  9. mysql 获取当前时间加上一个月

    select DATE_ADD(NOW(), interval 1 MONTH) NOW()此处必须为时间格式 date_add() 增加 date_sub()减少 month 月份 minute 分 ...

  10. 数据库异常:SQL Error: 0, SQLState: S0022

    问题描述 在本地搭建 mysql + MyEclipse + tomcat,系统跑起来之后,调用自己写的查询接口,报错“SQL Error: 0, SQLState: S0022” 具体报错:  -  ...