1 题目

分行从上到下打印二叉树

                  23    5           1  4  2  3 

我们打印如下

23     51     4     2     3

2 分析

之前这篇博客写了通过队列按层打印剑指offer之按层打印树节点

现在无非就是还要按照条件打印,第一次打印1个,然后第二次打印2个,第三次打印4个,我们可以这样,搞2个变量,第一个变量表示这行还没有打印的个数,另外一个变量是下列需要打印的个数,如果这一行还没有打印的个数是0了,我们就把下列需要打印值个数赋值给它,然后下一列变量的个数变量赋值为0.

3 代码实现

#include <iostream>
#include <queue>using namespace std;typedef struct Node
{int value;struct Node* left;struct Node* right;
} Node;void layer_print(Node *head)
{if (head == NULL){std::cout << "head is NULL" << std::endl;return;}std::queue<Node *> queue;queue.push(head);//下一列需要打印节点的个数int next_print_count = 0;//当前这一列还需要打印节点的个数int has_print_count = 1;while(queue.size()){Node *node = queue.front();std::cout << node->value << "\t";if (node->left){queue.push(node->left);next_print_count++;}if (node->right) {queue.push(node->right);next_print_count++;}queue.pop();has_print_count--;if (has_print_count == 0){has_print_count = next_print_count;next_print_count = 0;std::cout << std::endl;}}
}int main()
{/*              2*           3    5           *         1  4  2  3       *       */Node head1, node1, node2, node3, node4, node5, node6;Node head2, node7, node8;head1.value = 2;node1.value = 3;node2.value = 5;node3.value = 1;node4.value = 4;node5.value = 2;node6.value = 3;head1.left = &node1;head1.right = &node2;node1.left = &node3;node1.right = &node4;node2.left = &node5;node2.right = &node6;node3.left = NULL;node3.right = NULL;node4.left = NULL;node4.right = NULL;node5.left = NULL;node5.right = NULL;node6.left = NULL;node6.right = NULL;layer_print(&head1);return 0;
}

4 运行结果

2
3       5
1       4       2       3

5 总结

通过第一行的打印的个数,我们找到第二列打印的个数,通过第二行打印的个数,我们需要打印第三行需要打印的个数,我们可以用2个变量来搞定。

剑指offer之分行从上到下打印二叉树相关推荐

  1. Python剑指offer:分行从上到下打印二叉树

    从上到下按层打印二叉树,同一层的节点按照从左到右 的顺序打印,每一层打印到第一行,例如本题中上一个问题的二叉树 输出形式会是: 8 6 10 5 7 9 11 这道题和前面一道题十分类似,也可以用一个 ...

  2. 剑指offer:分行从上往下打印二叉树

    文章目录 分析 题目来源 分析 思路: 在原来bfs的基础上,每一层结束时做一个标记nullptr,每当扫描到这个标记时,就将当前队列中元素存入vector中,并清空中间vector,进入下一层. 这 ...

  3. leetcode 打印_剑指 Offer 32 - III 从上到下打印二叉树 III - leetcode 剑指offer

    题目难度: 中等 原题链接 今天继续更新剑指 offer 系列, 这道题相比昨天那道题多了个每层打印方向不同的需求, 聪明的你想到应该如何实现了吗? 老样子晚上 6 点 45 分准时更新公众号 每日精 ...

  4. 【LeetCode】剑指 Offer 32 - III. 从上到下打印二叉树 III

    [LeetCode]剑指 Offer 32 - III. 从上到下打印二叉树 III 文章目录 [LeetCode]剑指 Offer 32 - III. 从上到下打印二叉树 III package o ...

  5. 【LeetCode】剑指 Offer 32 - II. 从上到下打印二叉树 II

    [LeetCode]剑指 Offer 32 - II. 从上到下打印二叉树 II 文章目录 [LeetCode]剑指 Offer 32 - II. 从上到下打印二叉树 II 一.层序遍历 BFS 一. ...

  6. 【最佳解法】剑指 Offer 32 - III. 从上到下打印二叉树 III

    立志用最少的代码做最高效的表达 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推. 例如: 给定二叉 ...

  7. 【简洁+注释】剑指 Offer 32 - II. 从上到下打印二叉树 II

    立志用最少的代码做最高效的表达 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 例如: 给定二叉树: [3,9,20,null,null,15,7], 返回其层次遍历结果 ...

  8. 剑指 Offer 32 - III. 从上到下打印二叉树 III

    解题思路:层级遍历 看本题思路之前首先看 1.从上到下打印二叉树1:https://blog.csdn.net/Mr_Jiax/article/details/109783502 2.从上到下打印二叉 ...

  9. 【简洁写法】剑指 Offer 32 - I. 从上到下打印二叉树

    立志用最少的代码做最高效的表达 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印. 例如: 给定二叉树: [3,9,20,null,null,15,7], 返回: [3,9,20,1 ...

最新文章

  1. Msql sql(优化三)
  2. Set 和 Map 数据结构
  3. 作业: IT 行业博客网站分析和创新
  4. php加超链接不显示不出来,如何将图片作为超链接 我制作了添加超链接的图片,但是图片怎么在浏览器显示不出来呢?...
  5. Python学习笔记:面向对象编程(2)
  6. 天然气压缩因子计算软件_徐秀芬等:天然气加气站压缩机组效率的计算方法
  7. 数据结构与算法 | Leetcode 19. Remove Nth Node From End of List
  8. 微信小程序云开发教程-小程序在云开发下的运作模式
  9. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_12_练习_文件复制...
  10. Springboot+ Mybatis搭建学习
  11. idea导出快捷键配置
  12. 鸿蒙系统怎么关闭地理位置通知,鸿蒙OS 获取设备的位置信息
  13. 互联网产品经理是做什么的
  14. 24点游戏(python)
  15. 期货基本面分析:,马来西亚10月1-10日棕榈油出口量较上月同期下降17.3%,但对中国出口创一年新高
  16. OSSIM开源安全信息管理系统(十六)
  17. 高德地图/腾讯地图地址转换经纬度
  18. Linux文件查找的4个命令
  19. vs编译出现 0xC0000005
  20. 20世纪中文小说100强

热门文章

  1. 【.NET】实现CI/CD(二)运行镜像,自动化部署
  2. 自定义EventSource(二)PollingCounter
  3. Binding(二):控件关联和代码提升
  4. 技术分享|手机推送原理剖析指南
  5. Nexus:一站式私有仓库管理(NuGet、Maven、npm、Docker)
  6. 理解 redis 中的 集合对象类型
  7. 真正的高手,都有增长思维!(深度好文)
  8. 旧 WCF 项目迁移到 asp.net core + gRPC 的尝试
  9. [工具]微软的学习平台Microsoft Learn很好用,推荐一下
  10. 用asp.net core结合fastdfs打造分布式文件存储系统