按之字形顺序打印二叉树

描述

  给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)

数据范围:

  要求:空间复杂度:O(n)O(n),时间复杂度:O(n)O(n)

  例如:

  给定的二叉树是{1,2,3,#,#,4,5}

该二叉树之字形层序遍历的结果是

[

[1],

[3,2],

[4,5]

]

示例1

输入:
{1,2,3,#,#,4,5}
返回值:
[[1],[3,2],[4,5]]
说明:
如题面解释,第一层是根节点,从左到右打印结果,第二层从右到左,第三层从左到右。

示例2

输入:
{8,6,10,5,7,9,11}
返回值:
[[8],[10,6],[5,7,9,11]]

示例3

输入:
{1,2,3,4,5}
返回值:
[[1],[3,2],[4,5]]

解法思路描述

  通过队列,将所有的节点按照先序遍历的形式依次存入一个一维数组中,每存储一个深度的数据,便将该一维数组存储的数据存放至二维数组中(这个过程中需要判断当前是之字形的从左往右的顺序还是从右往左的顺序来改变一维数组的顺序),反复循环直至取出所有的子树即可。

解法源代码

/*
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>> arr;vector<int> numberArr;if (nullptr == pRoot)return arr;if (pRoot->left == nullptr && pRoot->right == nullptr) {numberArr.push_back(pRoot->val);arr.push_back(numberArr);return arr;}TreeNode* node;bool isRight = true;queue<TreeNode*> queue;queue.push(pRoot);while (!queue.empty()) {int count = 0, size = queue.size();while (count < size) {++count;node = queue.front();numberArr.push_back(node->val);queue.pop();if (node->left != nullptr)queue.push(node->left);if (node->right != nullptr)queue.push(node->right);}if(false == isRight){for(int i=0,j=numberArr.size()-1;i<j;i++,j--){int temp = numberArr[i];numberArr[i] = numberArr[j];numberArr[j] = temp;}}isRight = !isRight;arr.push_back(numberArr);numberArr.clear();}return arr;}
};

按之字形顺序打印二叉树(C++)相关推荐

  1. 按之字形顺序打印二叉树

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

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

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

  3. java面试(二十六)--(1)J2EE中常用名词(2)讲一下redis的主从复制怎么做的?(3)请谈谈你对Javaweb开发中的监听器的理解?(4)按之字形顺序打印二叉树(5)内部类大全

    1.J2EE中常用名词 web容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使 JSP,SERVLET直接跟容器中的环境变量接**互,不必关注其它系统问题.主要有WEB服务器来 ...

  4. (剑指Offer)面试题61:按之字形顺序打印二叉树

    题目: 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 思路: 按照广度优先遍历来遍历二叉树,但是需要 ...

  5. [剑指Offer] 59.按之字形顺序打印二叉树

    题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. [思路]先按层次遍历存入,通过设立标志位,将 ...

  6. 剑指Offer(Java实现)按之字形顺序打印二叉树

    题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 解题思路 方法一:利用两个栈的辅助空间分别存 ...

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

    题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 使用双向链表,先把当前行按顺序打印,再取出当 ...

  8. 打印list_按之字形顺序打印二叉树

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

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

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

  10. 【NC14 按之字形顺序打印二叉树】

    描述 给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替) 数据范围:0 \le n \le 15000≤n≤1500,树上每个节点的val满足 |val| ...

最新文章

  1. 医药信息化:GMP/GSP之后
  2. 算法训练营 重编码_编码训练营后如何找到工作
  3. mysql 表锁-解锁
  4. android tee,Android 9.0的新增安全特性与TEE
  5. 五大领域总目标指南_每日干货 | 五大领域 学前社会教育1
  6. Python求单词长度并根据长度排序
  7. xp 无法运行 php.exe,【xpexe文件不能执行】xp exe文件打不开_xp系统exe文件打不开-系统城...
  8. FastStone Capture9.6
  9. 大学计算机课思维导图,快速记忆和理解大学计算机思维导图
  10. zte d90 java_zte d90 驱动程序(最新更新)尼康d90驱动
  11. 使用.NET技术制作KTV点歌项目,新手篇
  12. Python计算经济距离权重矩阵
  13. C# VS2010 无法切换输入法。
  14. shell 中的单行注释和多行注释
  15. 基于51单片机控制的篮球比赛计时、计分系统设计与仿真(含设计图和C语言程序源码)
  16. js 根据id 取出数组中对应的对象
  17. 决策树【机器学习笔记简摘】
  18. IOST节点竞选计划公布,欢迎广大开发者参与成为节点!
  19. 新手上路--linux学习第一课
  20. eclipse建立Flex项目之Blazeds篇1(测试成功完整版)

热门文章

  1. 字节跳动2021内推启动啦
  2. torch--[Pytorch函数] .masked_fill_() ;关于pytorch中@和*的用处
  3. Python - Flask 框架返回的中文是Unicode 编码,如何解决
  4. 从零实现深度学习框架——动手实现逻辑回归
  5. HarmonyOS IoT首著,走进万物互联的世界!
  6. 揭秘盒马鲜生,如何打破收益增长天花板!
  7. 软件集成策略故事连载----构建错误是怎么来的
  8. PowerPoint媒体更加适合这样的场合
  9. Git版本控制:Git分支处理
  10. python获取cpu信息_使用python获取CPU和内存信息的思路与实现(linux系统)