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]]的更多相关文章

  1. 剑指Offer——按之字形顺序打印二叉树

    题目描述: 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 分析: 我们都知道二叉树的层次遍历用的是队 ...

  2. 剑指offer---3、按之字形顺序打印二叉树

    剑指offer---3.按之字形顺序打印二叉树 一.总结 一句话总结: |||-begin 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照 ...

  3. 按之字形顺序打印二叉树 牛客网 剑指Offer

    按之字形顺序打印二叉树 牛客网 剑指Offer 题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推 ...

  4. 【剑指Offer】按之字形顺序打印二叉树 解题报告(Python)

    [剑指Offer]按之字形顺序打印二叉树 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervie ...

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

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

  6. JZ-059-按之字形顺序打印二叉树

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

  7. 剑指offer系列34----按之字形顺序打印二叉树

    [题目]请实现一个函数按照之字形打印二叉树, * 即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印, * 其他行以此类推. 未优化,不是最优解,博主用的是队列 ...

  8. 剑指Offer-按之字形顺序打印二叉树

    package Tree; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; /** * ...

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

    题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 题目地址 https://www.nowco ...

随机推荐

  1. jquery中清空

    jQuery("#map_bmmc").empty();   function qingkong(){         $("#form1").find(&qu ...

  2. iframe中用到的例子

    <view:qrytr>         <view:qrytd colspan="4">     <iframe id="ccbl&quo ...

  3. Spring Boot|监控-Actuator

    Spring Boot 为我们提供了一个生产级特性-Actuator,包含很多实际有用的API,下面我们就一起来看看这些API. 一.Actuator 首先在程序中引入Actuator <!-- ...

  4. JMETER + POST + anti-forgery token

    JMETER + POST + anti-forgery token Looking into XSRF/CSRF Prevention in ASP.NET MVC and Web Pages it ...

  5. c++ curl 登陆renren.com (cookie的使用)<转>

    size_t write_callback( void *ptr, size_t size, size_t nmemb, void *stream ) { int len = size * nmemb ...

  6. gitlab 构建常见错误

    1.前端是http服务后端是https,原因生产https,测试是http服务环境.代理后端2. java 打包程序需要运行正式数据库没连上错误.打包和跑正式的一个库.3. jenkins不能直接no ...

  7. xss payload大全

    刚好刚才在fuzz一个站的时候用到,就从笔记里抛出来了. code: (1)普通的XSS JavaScript注入 <SCRIPT SRC=http://3w.org/XSS/xss.js> ...

  8. Qt编写气体安全管理系统13-短信告警

    一.前言 短信告警这个模块在很多项目中都用上了,比如之前做过的安防系统,温湿度报警系统等,主要的流程就是收到数据判断属于某种报警后,组织短信字符串内容,发送到指定的多个手机号码上面,使用的是短信猫硬件 ...

  9. 原生JavaScript常用本地浏览器存储方法二(cookie)

    JavsScript Cookie概述 cookie是浏览器提供的一种机制,它将document对象的cookie属性提供给JavaScript.可以由JavaScript对其进行控制,而并不是Jav ...

  10. 如何查看crontab定时任务是否执行过 查看记录

    命令的模式像下面这个: grep "script.php" /path/file.ext. 比如,下面的命令就是从/var/log/cron.log 检测cron任务是否有执行 c ...