【剑指offer】之字形打印二叉树,C++实现
原创文章,转载请注明出处!
本题牛客网地址
博客文章索引地址
博客文章中代码的github地址
1.题目
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
例如:
输入二叉树
输出顺序
1
3 2
4 5 6 7
15 14 13 12 12 10 9 8
2.思路
本题使用两个栈作为辅助容器。打印某一层节点时,把下一层的子节点保存到栈内。如果当前打印的是奇数层,则先保存左子树节点再保存右子树节点到第一个栈内;如果当前打印的是偶数层,则先保存右子树在保存左子树节点到第二个栈内。
3.代码
1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *right; 6 TreeNode(int x) : 7 val(x), left(NULL), right(NULL) { 8 } 9 }; 10 */ 11 class Solution { 12 public: 13 vector<vector<int> > Print(TreeNode* pRoot) { 14 15 // 存储结果 16 vector<vector<int> > results; 17 vector<int> rlt_temp; 18 19 // 边界条件 20 if(pRoot == nullptr) 21 return results; 22 23 // 辅助容器 24 stack<TreeNode*> stk[2]; // stk[0]是奇数层,stk[1]是偶数层 25 int now = 0; 26 int next = 1; 27 TreeNode* temp=pRoot; 28 29 // 根节点入栈 30 stk[now].push(temp); 31 32 // 遍历两个栈,当两个栈均为空时,跳出循环 33 while(!stk[now].empty() || !stk[next].empty()){ 34 // 存储遍历结果 35 temp = stk[now].top(); 36 rlt_temp.push_back(temp->val); 37 stk[now].pop(); 38 39 // 当前层是奇数或偶数 40 if(now==0) 41 { 42 // 当前层是奇数时,左子树先入栈,右子树后入栈 43 if(temp->left!=nullptr) 44 stk[next].push(temp->left); 45 if(temp->right!=nullptr) 46 stk[next].push(temp->right); 47 } 48 else 49 { 50 // 当前层是偶数时,右子树先入栈,左子树后入栈 51 if(temp->right!=nullptr) 52 stk[next].push(temp->right); 53 if(temp->left!=nullptr) 54 stk[next].push(temp->left); 55 } 56 57 // 当前层为空时,打印下一层 58 if(stk[now].empty()) 59 { 60 results.push_back(rlt_temp); 61 rlt_temp.clear(); 62 now=1-now; 63 next = 1-next; 64 } 65 } 66 return results; 67 } 68 };
转载于:https://www.cnblogs.com/wanglei5205/p/8639178.html
【剑指offer】之字形打印二叉树,C++实现相关推荐
- 《剑指offer》-逐层打印二叉树
题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 乍一看就是一个BFS,但是因为太久没刷题都忘记了要使用queue来作为空间存储容器了. 先参考milolip的代码,写出这样 ...
- 剑指offer之中序打印二叉树(非递归实现)
1 问题 中序打印二叉树(非递归实现),比如二叉树如下 /* 2* 3 5 * 1 4 2 3 * 3 2 1 5 1 4 2 3 中序:按左中右来打印二叉树,结果如下 3 1 2 3 1 4 5 2 ...
- 剑指offer——复习1:二叉树三种遍历方式的迭代与递归实现
剑指offer--复习1:二叉树三种遍历方式的迭代与递归实现 20180905更新:这个博客中的解法不是很好,看相应的LeetCode题目笔记~~~ 我感觉此博客中的说法更容易让人理解:https:/ ...
- 《LeetCode力扣练习》剑指 Offer 29. 顺时针打印矩阵 Java
<LeetCode力扣练习>剑指 Offer 29. 顺时针打印矩阵 Java 一.资源 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matr ...
- 《LeetCode力扣练习》剑指 Offer 28. 对称的二叉树 Java
<LeetCode力扣练习>剑指 Offer 28. 对称的二叉树 Java 一.资源 题目: 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的 ...
- LeetCode Algorithm 剑指 Offer 28. 对称的二叉树
剑指 Offer 28. 对称的二叉树 Ideas 一开始想的有问题,看了例子以为对称二叉树的中序遍历序列是回文数组,然后就用这么写了,结果到第192个测试用例[1,2,2,2,null,2]就失败了 ...
- 【LeetCode】剑指 Offer 28. 对称的二叉树
[LeetCode]剑指 Offer 28. 对称的二叉树 文章目录 [LeetCode]剑指 Offer 28. 对称的二叉树 一.递归 一.递归 对称二叉树定义:对于书中任意两个对称结点 L 和 ...
- 剑指 Offer 28. 对称的二叉树 -- 递归
0 题目描述 leetcode原题链接:剑指 Offer 28. 对称的二叉树 1 递归解法 对称二叉树定义: 对于树中 任意两个对称节点 LLL 和 R,R,R, 一定有: L.val=R.val: ...
- 【剑指offer】顺时针打印矩阵
转载请注明出处:http://blog.csdn.net/ns_code/article/details/26053049 剑指offer上的第20题,九度OJ上測试通过. 题目描写叙述: 输入一个矩 ...
- 剑指offer:顺时针打印矩阵
题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1 ...
最新文章
- centos7虚拟机使用docker搭建swoole环境
- ajax 导出文件给 文件重新命名_Tanner LEdit 05 | 导出GDSII文件
- 文件打包成zip类型文件
- Procedure execution failed 2013 - Lost connection to MySQL server during query
- JAVA高精度计算工具
- python求取列表中的质数
- java基础知识陷阱
- css 字体倾斜_css笔记3(文本,列表,背景声明)
- 计算机考研专业综合考试二,2015计算机考研大纲:专业基础综合考试大纲原文(2)...
- python 函数对象(函数式编程 lambda、map、filter、reduce)、闭包(closure)
- Selenium 方法封装 一
- Spring源码探究:容器
- python下载前获取文件大小
- 使用WinImage的命令行修改img文件
- qart 图形二维码 html2canvas下载二维码
- MySQL之Explain
- Matlab似然比检验函数,似然比检验 LRT
- 专业课课本复习(数电,通原,数信,信号与系统,数据结构)
- org.xml.sax.SAXParseException: 元素内容必须由格式正确的字符数据或标记组成。 的解决办法
- 关于eMule下载伤硬盘的话题
热门文章
- 微信小程序 data中数据值的更改与储存
- Android移动应用基础教程【使用内容提供者共享数据】
- 最长公共子串_两个字符串的最长公共子串(后缀自动机)
- spingbot 与 activiti 整个 中创建表而找不到表的问题(创建表失败)
- 按层次遍历二叉树_LeetCode | 102.二叉树的层次遍历
- java函数调用实例_Java使用方法引用实现任意对象的实例方法
- C#程序打包与部署,包括处理安装向导中用户输入的参数,创建卸载程序。
- cent os7 安装nginx1.16.1
- java 线程状态_Java线程的状态
- php实现语音留言,iPhone实现语音留言 新技能get