(剑指Offer)面试题61:按之字形顺序打印二叉树
题目:
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路:
按照广度优先遍历来遍历二叉树,但是需要按照之字形来打印,意味着:
奇数行从左到右,跟BFS的遍历顺序一样,而偶数行从右到左,跟BFS的遍历顺序相反。
因此我们不能直接采用队列,可以通过两个栈来实现,一个实现先进先出,即入栈顺序为右子节点、左子节点;一个实现后进先出,即入栈顺序为左子节点、右子节点。(具体参照代码)
在线测试:
http://www.nowcoder.com/books/coding-interviews/91b69814117f4e8097390d107d2efbe0?rp=3
AC代码:
/*
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> > result;if(pRoot == NULL)return result;stack<TreeNode*> stk1;stack<TreeNode*> stk2;stk1.push(pRoot);TreeNode* tmp;vector<int> tLevel;while(!stk1.empty() || !stk2.empty()){if(!stk1.empty()){while(!stk1.empty()){tmp=stk1.top();tLevel.push_back(tmp->val);if(tmp->left)stk2.push(tmp->left);if(tmp->right)stk2.push(tmp->right);stk1.pop();}result.push_back(tLevel);tLevel.clear();}else{while(!stk2.empty()){tmp=stk2.top();tLevel.push_back(tmp->val);if(tmp->right)stk1.push(tmp->right);if(tmp->left)stk1.push(tmp->left);stk2.pop();}result.push_back(tLevel);tLevel.clear();}}return result;}};
(剑指Offer)面试题61:按之字形顺序打印二叉树相关推荐
- 剑指offer(C++)-JZ77:按之字形顺序打印二叉树(数据结构-树)
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直 ...
- 剑指offer面试题[23]-从上往下打印二叉树(按层序打印)
题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. /* struct TreeNode {int val;struct TreeNode *left;struct TreeNode * ...
- 剑指offer——面试题61:按之字形顺序打印二叉树
剑指offer--面试题61:按之字形顺序打印二叉树 Solution1: 基于上一题的解法,缺点:效率低下! /* struct TreeNode {int val;struct TreeNode ...
- 剑指offer——面试题42-2:翻转单词顺序
剑指offer--面试题42-2:翻转单词顺序 20180906整理 Solution1: 自己想的垃圾算法 对于c++中的string对象,substr()和erase()函数都是很常用的,常见用法 ...
- 剑指offer——面试题14:调整数组顺序使奇数位于偶数前面
剑指offer--面试题14:调整数组顺序使奇数位于偶数前面 Solution1: 顺序交换,比较好的算法!!! class Solution { public:void reOrderArray(v ...
- 剑指offer——面试题5:从尾到头打印链表
剑指offer--面试题5:从尾到头打印链表 Solution1:我的答案 /** * struct ListNode { * int val; * struct ListNode *next; * ...
- [剑指offer]面试题42:翻转单词顺序 VS左旋转字符串
面试题42:翻转单词顺序 VS左旋转字符串 题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a st ...
- [剑指offer]面试题5:从尾到头打印链表
面试题5:从尾到头打印链表 题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值. 链表结点定义如下: struct ListNode {int m_nKey;ListNode *m_pNex ...
- 剑指Offer - 面试题61. 扑克牌中的顺子
1. 题目 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1,J为11,Q为12,K为13,而大.小王为 0 ,可以看成任意数字.A 不能视为 14. 示 ...
- 剑指offer 面试题61. 扑克牌中的顺子
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1,J为11,Q为12,K为13,而大.小王为 0 ,可以看成任意数字.A 不能视为 14. 示例 1: 输 ...
最新文章
- BLAST引物或靶点特异性
- [转]免费邮件服务器hMailServer搭配SpamAssassin过滤垃圾邮件:安装和设置
- 人类又双叒叕输了,就没人能管管这条“狗”吗?
- Go语言环境安装,验证go语言环境、使用文本编辑器编写一个go hello world,Go lang IDE安装,在golang中新建一个go程序
- GDB调试之前的相关设置,会使程序调试起来,事半功倍
- 在linux中安装.sh 文件
- 关于小程序授权地理位置(wx.getLocation + 用户体验)
- oracle下lag和lead分析函数
- 红橙Darren视频笔记 流式布局tagLayout measure layout方法学习 adapter使用 学习感悟
- php易宝支付扫码支付代码_谈谈扫码支付
- c语言贪吃蛇游戏 vc6,把tc下的贪吃蛇游戏改到vc6下运行
- 最好用的屏幕录像软件,三步实现高清录制?
- Java 电阻计算器(一)
- 常用的C语言编程工具
- 【2015DTCC】专访永洪科技CEO:商业智能搬运大数据之谜
- 【OR】约束优化:对偶理论(1)
- 3分钟学会使用Elasticsearch跨集群复制功能(CCR)
- 淘宝的互动项目,为什么总会刷爆你的好友圈?
- er图 navicat_Navicat 怎么生成ER图表
- アプリケーションコンポーネント(大分類)
热门文章
- 深入理解 Mybatis 插件开发
- 彻底搞懂MySQL分区
- Swin Transformer升级版来了!30亿参数,刷榜多项视觉任务,微软亚研原班人马打造...
- 腾讯宣布员工最高可申请免息借款90万!网友:应届当码农就能一线城市买房了!...
- 他给女朋友做了个树莓派复古相机,算法代码可自己编写,成本不到700元丨开源...
- 吴恩达老师,被曝靠「教书」实现首个IPO上市,估值50亿美元
- 超越谷歌BERT!依图推出预训练语言理解模型ConvBERT,入选NeurIPS 2020
- 自动识别口罩佩戴模型在线教学,抗疫在家涨知识!
- 中国疾控中心回应论文争议:所有病例在论文撰写前已向社会公布
- python下使用epoll