题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

乍一看就是一个BFS,但是因为太久没刷题都忘记了要使用queue来作为空间存储容器了。

先参考milolip的代码,写出这样的solution:


class Solution {
public:vector<vector<int> > Print(TreeNode* pRoot) {vector<vector<int> > res;if(pRoot==NULL){return res;}queue<TreeNode*> Q;Q.push(pRoot);Q.push(NULL);vector<int> v;v.push_back(pRoot->val);res.push_back(v);v.clear();while (!Q.empty()){TreeNode* node = Q.front();Q.pop();if (node != NULL){//v.push_back(node->val);//cout << node->val << ends;if (node->left){Q.push(node->left);v.push_back(node->left->val);}if (node->right){Q.push(node->right);v.push_back(node->right->val);}}else if (!Q.empty()){//cout << "test " << endl;Q.push(NULL);res.push_back(v);v.clear();//cout << endl;}}return res;}
};

上面的代码并不太简洁的样子。

另一种写法是从评论区copy来的,又简洁,又非常直观清晰。两层while的嵌套,正好对应到数的层次遍历以及层内逐点遍历。而这种双层嵌套的循环其实并没有增加复杂度,和原来的复杂度是一样的。

class Solution_11 {
public:vector<vector<int> > Print(TreeNode* pRoot) {vector<vector<int> > res;if (pRoot == NULL){return res;}queue<TreeNode*> q;q.push(pRoot);while (!q.empty()){int lo = 0, hi = q.size();vector<int> v;while (lo++ < hi){TreeNode *t = q.front();q.pop();v.push_back(t->val);if (t->left){q.push(t->left);}if (t->right){q.push(t->right);}}res.push_back(v);}return res;}
};

测试代码;

void main_solution_11(){Solution_11 s = Solution_11();TreeNode* a = new TreeNode(8);TreeNode* b1 = new TreeNode(6);TreeNode* b2 = new TreeNode(10);TreeNode* c1 = new TreeNode(5);TreeNode* c2 = new TreeNode(7);TreeNode* c3 = new TreeNode(9);TreeNode* c4 = new TreeNode(1);a->left = b1;a->right = b2;b1->left = c1;b1->right = c2;b2->left = c3;b2->right = c4;vector<vector<int> > q = s.Print(a);for (int i = 0; i < q.size(); i++){for (int j = 0; j < q[i].size(); j++){if (j > 0){cout << " ";}cout << q[i][j];}cout << endl;}
}int main(){main_solution_11();return 0;
}

《剑指offer》-逐层打印二叉树相关推荐

  1. 【LeetCode】剑指 Offer 37. 序列化二叉树

    [LeetCode]剑指 Offer 37. 序列化二叉树 文章目录 [LeetCode]剑指 Offer 37. 序列化二叉树 package offer;import java.util.Link ...

  2. 【LeetCode】剑指 Offer 07. 重建二叉树

    [LeetCode]剑指 Offer 07. 重建二叉树 文章目录 [LeetCode]剑指 Offer 07. 重建二叉树 package offer;import java.util.ArrayD ...

  3. 【LeetCode】剑指 Offer 68 - II. 二叉树的最近公共祖先

    [LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 文章目录 [LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 一.DFS 一.DFS 祖先的定义 ...

  4. 【LeetCode】剑指 Offer 55 - I. 二叉树的深度

    [LeetCode]剑指 Offer 55 - I. 二叉树的深度 文章目录 [LeetCode]剑指 Offer 55 - I. 二叉树的深度 一.后序遍历(DFS) 二.层序遍历 一.后序遍历(D ...

  5. 【LeetCode】剑指 Offer 17. 打印从1到最大的n位数

    [LeetCode]剑指 Offer 17. 打印从1到最大的n位数 文章目录 [LeetCode]剑指 Offer 17. 打印从1到最大的n位数 一.大数 一.大数 将 1~9 加入队列 对队列中 ...

  6. 剑指 Offer II 044. 二叉树每层的最大值

    链接:剑指 Offer II 044. 二叉树每层的最大值 题解: /*** Definition for a binary tree node.* struct TreeNode {* int va ...

  7. 【剑指 Offe】剑指 Offer 17. 打印从1到最大的n位数

    目录标题 算法汇总 题目 关键点 代码 1.解体方法 思路 代码 时间和空间复杂度 2.解题方法,如暴力法 思路 代码 时间和空间复杂度 算法汇总 以下是所有算法汇总,包括GitHub源码地址链接:力 ...

  8. [剑指offer]顺时针打印矩阵

    [剑指offer]顺时针打印矩阵 剑指offer-顺时针打印矩阵 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matrix = [[1,2,3],[4, ...

  9. 剑指 Offer II 047. 二叉树剪枝

    剑指 Offer II 047. 二叉树剪枝: 题目链接 :剑指 Offer II 047. 二叉树剪枝 题目: 给定一个二叉树 根节点 root ,树的每个节点的值要么是 0,要么是 1.请剪除该二 ...

  10. 剑指Offer #04 重建二叉树(递归)

    题目来源:牛客网-剑指Offer专题 题目地址:重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序 ...

最新文章

  1. CES 2019开胃菜竟然是芯片,英特尔 英伟达 高通 华为 AMD已经开打!
  2. shell编程:定义简单标准命令集
  3. @Autowire 和 @Resource 注解使用的正确姿势,别再用错的了!!
  4. 微信js sdk 分享 失败 有时候好 有时候坏
  5. PS比狠大赛!看看谁家的照片更丑!
  6. python怎么输出结果_Python中print()常用输出方法
  7. MariaDB强势席卷DB-Engines榜单后续,与阿里云达成全球独家战略合作
  8. ae中心点重置工具_如何使用AE制作文字破碎动画?制作ae破碎文字特效教程分享...
  9. C++ container member map
  10. github 如何 只下载 一个项目中的 部分 代码文件
  11. SoapUI使用教程
  12. html 滑动门效果,js实现简洁的滑动门菜单(选项卡)效果代码
  13. QGIS安装以及使用教程
  14. dede文章采集管理php,DEDECMSV5.7最新自动采集伪原创插件
  15. uniapp点击复制文本
  16. QT for Android串口开发
  17. wannier插值能带拟合2
  18. Android 实现指南针效果
  19. 个人网站申请域名怎么做?做网站申请域名多少钱?
  20. PiXYZ Studio教程

热门文章

  1. 世界隐形冠军比拼:德国1307家、美国366家、中国68家
  2. 2019计算与系统神经科学大会Cosyne 前沿研究汇总
  3. 拯救顽疾大作战!IDC绘中国医疗AI生态图谱,英伟达献医疗影像新杀器
  4. 斯坦福证明神经网络能直接在光学芯片上训练
  5. “兼职开发的程序员,为什么不受企业待见?”
  6. 京东果然发福了:宣布涨薪两个月! 2 年内将员工平均薪资涨至 16 薪
  7. 格式化代码会发生什么?? | 每日趣闻
  8. 芒果TV 2021 互联网人才招聘
  9. 以太坊智能合约预言机
  10. Facebook Docusaurus 中文文档 安装指南