剑指offer之分行从上到下打印二叉树
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之分行从上到下打印二叉树相关推荐
- Python剑指offer:分行从上到下打印二叉树
从上到下按层打印二叉树,同一层的节点按照从左到右 的顺序打印,每一层打印到第一行,例如本题中上一个问题的二叉树 输出形式会是: 8 6 10 5 7 9 11 这道题和前面一道题十分类似,也可以用一个 ...
- 剑指offer:分行从上往下打印二叉树
文章目录 分析 题目来源 分析 思路: 在原来bfs的基础上,每一层结束时做一个标记nullptr,每当扫描到这个标记时,就将当前队列中元素存入vector中,并清空中间vector,进入下一层. 这 ...
- leetcode 打印_剑指 Offer 32 - III 从上到下打印二叉树 III - leetcode 剑指offer
题目难度: 中等 原题链接 今天继续更新剑指 offer 系列, 这道题相比昨天那道题多了个每层打印方向不同的需求, 聪明的你想到应该如何实现了吗? 老样子晚上 6 点 45 分准时更新公众号 每日精 ...
- 【LeetCode】剑指 Offer 32 - III. 从上到下打印二叉树 III
[LeetCode]剑指 Offer 32 - III. 从上到下打印二叉树 III 文章目录 [LeetCode]剑指 Offer 32 - III. 从上到下打印二叉树 III package o ...
- 【LeetCode】剑指 Offer 32 - II. 从上到下打印二叉树 II
[LeetCode]剑指 Offer 32 - II. 从上到下打印二叉树 II 文章目录 [LeetCode]剑指 Offer 32 - II. 从上到下打印二叉树 II 一.层序遍历 BFS 一. ...
- 【最佳解法】剑指 Offer 32 - III. 从上到下打印二叉树 III
立志用最少的代码做最高效的表达 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推. 例如: 给定二叉 ...
- 【简洁+注释】剑指 Offer 32 - II. 从上到下打印二叉树 II
立志用最少的代码做最高效的表达 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 例如: 给定二叉树: [3,9,20,null,null,15,7], 返回其层次遍历结果 ...
- 剑指 Offer 32 - III. 从上到下打印二叉树 III
解题思路:层级遍历 看本题思路之前首先看 1.从上到下打印二叉树1:https://blog.csdn.net/Mr_Jiax/article/details/109783502 2.从上到下打印二叉 ...
- 【简洁写法】剑指 Offer 32 - I. 从上到下打印二叉树
立志用最少的代码做最高效的表达 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印. 例如: 给定二叉树: [3,9,20,null,null,15,7], 返回: [3,9,20,1 ...
最新文章
- Msql sql(优化三)
- Set 和 Map 数据结构
- 作业: IT 行业博客网站分析和创新
- php加超链接不显示不出来,如何将图片作为超链接 我制作了添加超链接的图片,但是图片怎么在浏览器显示不出来呢?...
- Python学习笔记:面向对象编程(2)
- 天然气压缩因子计算软件_徐秀芬等:天然气加气站压缩机组效率的计算方法
- 数据结构与算法 | Leetcode 19. Remove Nth Node From End of List
- 微信小程序云开发教程-小程序在云开发下的运作模式
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_12_练习_文件复制...
- Springboot+ Mybatis搭建学习
- idea导出快捷键配置
- 鸿蒙系统怎么关闭地理位置通知,鸿蒙OS 获取设备的位置信息
- 互联网产品经理是做什么的
- 24点游戏(python)
- 期货基本面分析:,马来西亚10月1-10日棕榈油出口量较上月同期下降17.3%,但对中国出口创一年新高
- OSSIM开源安全信息管理系统(十六)
- 高德地图/腾讯地图地址转换经纬度
- Linux文件查找的4个命令
- vs编译出现 0xC0000005
- 20世纪中文小说100强
热门文章
- 【.NET】实现CI/CD(二)运行镜像,自动化部署
- 自定义EventSource(二)PollingCounter
- Binding(二):控件关联和代码提升
- 技术分享|手机推送原理剖析指南
- Nexus:一站式私有仓库管理(NuGet、Maven、npm、Docker)
- 理解 redis 中的 集合对象类型
- 真正的高手,都有增长思维!(深度好文)
- 旧 WCF 项目迁移到 asp.net core + gRPC 的尝试
- [工具]微软的学习平台Microsoft Learn很好用,推荐一下
- 用asp.net core结合fastdfs打造分布式文件存储系统