把二叉树打印成多行(C++)

描述

  给定一个节点数为 n 二叉树,要求从上到下按层打印二叉树的 val 值,同一层结点从左至右输出,每一层输出一行,将输出的结果存放到一个二维数组中返回。

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

该二叉树多行打印层序遍历的结果是

[

[1],

[2,3],

[4,5]

]

数据范围:二叉树的节点数

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

输入描述

给定一个二叉树的根节点

示例1

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

示例2

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

示例3

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

示例4

输入:
{}
返回值:
[]

解法/思路

方式一

使用队列进行广度遍历即可。

/*
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;if(pRoot == nullptr)return arr;vector<int> number;queue<TreeNode*> nodes;nodes.push(pRoot);int count;TreeNode* node;while(!nodes.empty()){count = nodes.size();while(count--){node = nodes.front();nodes.pop();number.push_back(node->val);if(node->left)nodes.push(node->left);if(node->right)nodes.push(node->right);}arr.push_back(number);number.clear();}return arr;}};

方式二

使用一个map结构记录当前层的所有数据,递归遍历二叉树即可。

/*
struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}
};
*/
class Solution {public:void GetDepth(TreeNode* node,map<int,vector<int>> &r,int depth){if(node == nullptr)return;if(r.end() != r.find(depth))r.at(depth).push_back(node->val);elser.insert(make_pair(depth,vector<int>{node->val}));GetDepth(node->left, r, depth+1);GetDepth(node->right, r, depth+1);}vector<vector<int>> Print(TreeNode* pRoot) {vector<vector<int>> arr;if(pRoot == nullptr)return arr;map<int,vector<int>> record;GetDepth(pRoot, record, 0);for(int i=0;i<record.size();i++){if(record.end() == record.find(i))continue;arr.push_back(record.at(i));}return arr;}};

把二叉树打印成多行(C++)相关推荐

  1. 《剑指offer》-- 二叉树的下一个结点、对称二叉树、按之字性顺序打印二叉树、把二叉树打印成多行

    一.二叉树的下一个结点: 1.题目: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 2.解题思路: 分析二叉树 ...

  2. 剑指offer——面试题60:把二叉树打印成多行

    剑指offer--面试题60:把二叉树打印成多行 Solution1: 20180911重做.经典题目.牢记做法! /* struct TreeNode {int val;struct TreeNod ...

  3. 剑指offer编程试题Java实现--60.把二叉树打印成多行

    个人博客:小景哥哥 60.把二叉树打印成多行 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. import java.util.ArrayList; import java ...

  4. 剑指offer(C++)-JZ78:把二叉树打印成多行(数据结构-树)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 给定一个节点数为 n 二叉树,要求从上到下按层打印二叉树的 val 值,同一层结点从 ...

  5. 剑指Offer(Java实现)把二叉树打印成多行

    题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 解题思路 利用辅助空间链表或队列来存储节点,每层输出. 代码实现 import java.util.ArrayList; i ...

  6. 《剑指offer》把二叉树打印成多行

    题目:从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 解析:层次遍历二叉树,要点是要用队列存储节点信息.还有个问题,如何知道要换层?答案是用一个计数器current指示当前层的节点个 ...

  7. 剑指offer:二叉树打印成多行(层次遍历)

    1. 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 2. 思路 层次遍历 3. 递归 public class Solution {ArrayList<ArrayL ...

  8. 剑指offer之把二叉树打印成多行

    题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 解题思路 二叉树的层次序遍历即可,注意vector的边界条件 AC代码 class Solution {public:vec ...

  9. 剑指offer面试题[60]-将二叉树打印成多行

    题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. /* struct TreeNode {int val;struct TreeNode *left;struct TreeN ...

  10. 【剑指Offer】60、把二叉树打印成多行

      题目描述:   从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行.   解题思路:   本题可类比第22题:从上往下打印二叉树,这两道题实际上是一回事,只不过这里我们多了一个分行打印 ...

最新文章

  1. visualSVN-server的安装图解
  2. 【OpenGL】八、初始化 OpenGL 渲染环境 ( 导入 OpenGL 头文件 | 链接 OpenGL 库 | 将窗口设置为 OpenGL 窗口 | 设置像素格式描述符 | 渲染绘制 ) ★
  3. 第8章 多项式回归与模型泛化
  4. 使用随机数以及扩容表进行join代码
  5. 自编码器深度分析+定制特征描述子构建初探
  6. B监狱 noip 模拟 7.29(区间DP)
  7. SAP Spartacus delivery mode continue button单元测试失败原因分析
  8. 《JS权威指南学习总结--9.5 类和类型》
  9. [转] Silverlight Navigation(多页面切换、传值)
  10. DIV默认高度且自适应高度
  11. 【渝粤教育】国家开放大学2019年春季 2321物流学概论 参考试题
  12. java计算机毕业设计辅导员班级量化管理系统MyBatis+系统+LW文档+源码+调试部署
  13. 高斯赛德尔潮流计算c语言编程,高斯赛德尔法潮流计算
  14. vue-devtools 必备开发工具
  15. 用phpexcel导入导出文件
  16. python处理考勤数据_python连接中控考勤机分析数据
  17. 如何升级maven版本
  18. 为什么你在互联网上搞不到钱?
  19. 将数据以表格的形式保存到pdf中
  20. 【Springboot+PageHelper】Springboot 添加PageHelper 分页

热门文章

  1. 具体数学-第5课(8种方法求和)
  2. Datawhale编程学习之栈和队列(2)
  3. 每周荐书:JVM、Nginx、小程序(评论送书)
  4. 321. 拼接最大数
  5. 3. tensorflow2实现两总体样本尺度、位置、分布检验问题 ——python实战
  6. 「三分钟系列01」3分钟看懂快速排序
  7. pandas小记:pandas数据输入输出
  8. 阿里算法工程师模拟题2018/5/7
  9. 开源java诊断工具,阿里开源Java 线上诊断工具 Arthas 实践
  10. php苹果推送消息,php推送消息到IOS