剑指offer59:按之字形顺序打印二叉树:[[1], [3,2], [4,5,6,7]]
1 题目描述
2 思路和方法
先给定一个二叉树的样式:
输出的样式是:[[1], [3,2], [4,5,6,7]]。包含以下信息: (1)每一层所包含的树节点;(2)偶数层的树节点需倒序。
思路: 面对要求的偶数层倒序,亦有两种解题思路,第一种是:获取到所有节点的值后,将偶数层的节点值倒序(先存right,再存left实现倒序)。第二种则是在获取节点的值的时候就倒序存入。定义两堆栈stack1和stack2,在遍历当前层节点的同时!stack1.empty() TreeNode *data=stack1.top();,存储下一层的节点(stack2.push(data->right),stack2.push(data->left)),以此类推,!stack2.empty() TreeNode *data=stack2.top();,存储下一层的节点(stack1.push(data->left),stack2.push(data->right))。
3 C++核心代码
- /*
- 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==nullptr)
- return result;
- stack<TreeNode*> stack1,stack2;//分别存奇数和偶数层
- stack1.push(pRoot);
- while(!stack1.empty() || !stack2.empty()){
- if(!stack1.empty()){
- vector<int> temp;
- while(!stack1.empty()){
- TreeNode *data=stack1.top();
- stack1.pop();
- temp.push_back(data->val);
- if(data->left!=nullptr)
- stack2.push(data->left);
- if(data->right!=nullptr)
- stack2.push(data->right);
- }
- result.push_back(temp);
- }
- if(!stack2.empty()){
- vector<int> temp;
- while(!stack2.empty()){
- TreeNode *data=stack2.top();
- stack2.pop();
- temp.push_back(data->val);
- if(data->right!=nullptr)
- stack1.push(data->right);
- if(data->left!=nullptr)
- stack1.push(data->left);
- }
- result.push_back(temp);
- }
- }
- return result;
- }
- };
参考资料
https://blog.csdn.net/u010005281/article/details/79759926
剑指offer59:按之字形顺序打印二叉树:[[1], [3,2], [4,5,6,7]]的更多相关文章
- 剑指Offer——按之字形顺序打印二叉树
题目描述: 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 分析: 我们都知道二叉树的层次遍历用的是队 ...
- 剑指offer---3、按之字形顺序打印二叉树
剑指offer---3.按之字形顺序打印二叉树 一.总结 一句话总结: |||-begin 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照 ...
- 按之字形顺序打印二叉树 牛客网 剑指Offer
按之字形顺序打印二叉树 牛客网 剑指Offer 题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推 ...
- 【剑指Offer】按之字形顺序打印二叉树 解题报告(Python)
[剑指Offer]按之字形顺序打印二叉树 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervie ...
- 【剑指Offer】59、按之字形顺序打印二叉树
题目描述: 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 解题思路: 这道题仍然是二 ...
- JZ-059-按之字形顺序打印二叉树
按之字形顺序打印二叉树 题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 题目链接: 按之字形 ...
- 剑指offer系列34----按之字形顺序打印二叉树
[题目]请实现一个函数按照之字形打印二叉树, * 即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印, * 其他行以此类推. 未优化,不是最优解,博主用的是队列 ...
- 剑指Offer-按之字形顺序打印二叉树
package Tree; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; /** * ...
- 剑指Offer 59. 按之字形顺序打印二叉树 (二叉树)
题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 题目地址 https://www.nowco ...
随机推荐
- avalon如何用年月日的方式输出..
在avolon里面的http://avalonjs.coding.me/filter.html 可以找到与date相关的转化,如果是要转化为年月日的形式,看下面的代码: <span style ...
- Nginx模块说明
一.Nginx内置模块 -–prefix= #指向安装目录 -–sbin-path #指向(执行)程序文件(nginx) -–conf-path= #指向配置文件(nginx.conf) -–erro ...
- BAT文件语法和技巧(bat文件的编写及使用)
比较有用的东西 首先,批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(no ...
- Oracle语法 及 SQL题目(二)
目录 课例复制 思考题四 解题思路 思考题五 解题思路 课例复制 思考题四 最近,经过你的努力,你得到了一份工作,成为了百货公司的一位经理. 到位后,你发现你的销售数据库中有两张表,一个是商店促销时间 ...
- URLEncoder.encode 使用心得
1.解决接口GET请求中:参数包含中文问题? 通过URLEncoder.encode 可以解决.我此次使用的utf-8编码,所以对中文进行urlencode 编码 而在服务器短 使用的tomcat ...
- 小福bbs-冲刺日志(第三天)
[小福bbs-冲刺日志(第三天)] 这个作业属于哪个课程 班级链接 这个作业要求在哪里 作业要求的链接 团队名称 小福bbs 这个作业的目标 前端交付部分页面给后端 ,后端开始完成部分功能 作业的正文 ...
- web常用服务架构
架构风格就是一种项目的设计模式.常见的架构风格有基于客户端与服务端的.基于组件模型的(EJB).分层架构(MVC).面向服务架构(SOA)等. 一.单体架构 单体架构也称为单体系统或单体应用,就是一种 ...
- Windows 开始 运行中所打开的默认程序以及优先级
Windows 开始 运行中所打开的默认程序以及优先级 Default app/softwares and priority for Windows/start/run 商务合作,科技咨询,版权转让: ...
- could not find 'gopls
安装go tools 安装以上后用vim打开go代码,使用函数跳转时会出现: E718: Funcref requiredvim-go: could not find 'gopls'. Run :Go ...
- Android开发Camera2相关
Android自定义相机 https://github.com/miqt/camera2 Camera2必知必会 https://www.cnblogs.com/fuyaozhishang/p/975 ...