题目:

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

思路:

按照广度优先遍历来遍历二叉树,但是需要按照之字形来打印,意味着:

奇数行从左到右,跟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:按之字形顺序打印二叉树相关推荐

  1. 剑指offer(C++)-JZ77:按之字形顺序打印二叉树(数据结构-树)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直 ...

  2. 剑指offer面试题[23]-从上往下打印二叉树(按层序打印)

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. /* struct TreeNode {int val;struct TreeNode *left;struct TreeNode * ...

  3. 剑指offer——面试题61:按之字形顺序打印二叉树

    剑指offer--面试题61:按之字形顺序打印二叉树 Solution1: 基于上一题的解法,缺点:效率低下! /* struct TreeNode {int val;struct TreeNode ...

  4. 剑指offer——面试题42-2:翻转单词顺序

    剑指offer--面试题42-2:翻转单词顺序 20180906整理 Solution1: 自己想的垃圾算法 对于c++中的string对象,substr()和erase()函数都是很常用的,常见用法 ...

  5. 剑指offer——面试题14:调整数组顺序使奇数位于偶数前面

    剑指offer--面试题14:调整数组顺序使奇数位于偶数前面 Solution1: 顺序交换,比较好的算法!!! class Solution { public:void reOrderArray(v ...

  6. 剑指offer——面试题5:从尾到头打印链表

    剑指offer--面试题5:从尾到头打印链表 Solution1:我的答案 /** * struct ListNode { * int val; * struct ListNode *next; * ...

  7. [剑指offer]面试题42:翻转单词顺序 VS左旋转字符串

    面试题42:翻转单词顺序 VS左旋转字符串 题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a st ...

  8. [剑指offer]面试题5:从尾到头打印链表

    面试题5:从尾到头打印链表 题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值. 链表结点定义如下: struct ListNode {int m_nKey;ListNode *m_pNex ...

  9. 剑指Offer - 面试题61. 扑克牌中的顺子

    1. 题目 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1,J为11,Q为12,K为13,而大.小王为 0 ,可以看成任意数字.A 不能视为 14. 示 ...

  10. 剑指offer 面试题61. 扑克牌中的顺子

    从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1,J为11,Q为12,K为13,而大.小王为 0 ,可以看成任意数字.A 不能视为 14. 示例 1: 输 ...

最新文章

  1. BLAST引物或靶点特异性
  2. [转]免费邮件服务器hMailServer搭配SpamAssassin过滤垃圾邮件:安装和设置
  3. 人类又双叒叕输了,就没人能管管这条“狗”吗?
  4. Go语言环境安装,验证go语言环境、使用文本编辑器编写一个go hello world,Go lang IDE安装,在golang中新建一个go程序
  5. GDB调试之前的相关设置,会使程序调试起来,事半功倍
  6. 在linux中安装.sh 文件
  7. 关于小程序授权地理位置(wx.getLocation + 用户体验)
  8. oracle下lag和lead分析函数
  9. 红橙Darren视频笔记 流式布局tagLayout measure layout方法学习 adapter使用 学习感悟
  10. php易宝支付扫码支付代码_谈谈扫码支付
  11. c语言贪吃蛇游戏 vc6,把tc下的贪吃蛇游戏改到vc6下运行
  12. 最好用的屏幕录像软件,三步实现高清录制?
  13. Java 电阻计算器(一)
  14. 常用的C语言编程工具
  15. 【2015DTCC】专访永洪科技CEO:商业智能搬运大数据之谜
  16. 【OR】约束优化:对偶理论(1)
  17. 3分钟学会使用Elasticsearch跨集群复制功能(CCR)
  18. 淘宝的互动项目,为什么总会刷爆你的好友圈?
  19. er图 navicat_Navicat 怎么生成ER图表
  20. アプリケーションコンポーネント(大分類)

热门文章

  1. 深入理解 Mybatis 插件开发
  2. 彻底搞懂MySQL分区
  3. Swin Transformer升级版来了!30亿参数,刷榜多项视觉任务,微软亚研原班人马打造...
  4. 腾讯宣布员工最高可申请免息借款90万!网友:应届当码农就能一线城市买房了!...
  5. 他给女朋友做了个树莓派复古相机,算法代码可自己编写,成本不到700元丨开源...
  6. 吴恩达老师,被曝靠「教书」实现首个IPO上市,估值50亿美元
  7. 超越谷歌BERT!依图推出预训练语言理解模型ConvBERT,入选NeurIPS 2020
  8. 自动识别口罩佩戴模型在线教学,抗疫在家涨知识!
  9. 中国疾控中心回应论文争议:所有病例在论文撰写前已向社会公布
  10. python下使用epoll