关于二叉树的层次遍历的花样(c++实现)
花样变形1::二叉树层次遍历但是分层打印
分析:与普通打印多了一个分层打印,其实只要在在层次遍历中多设置一个标记变量即可
代码如下:
//二叉树的层次遍历
void levelTravel(BTNode *bt)
{if (bt == NULL){return;}queue<BTNode *> nodeQueue;nodeQueue.push(bt);nodeQueue.push(NULL); //放入空节点,作为层的结束符while (nodeQueue.size()){BTNode *pNode = nodeQueue.front(); //取队首元素nodeQueue.pop(); //必须出队列if (pNode) //该节点非空{cout << pNode->data << ' ';if (pNode->lchild) //左孩子{nodeQueue.push(pNode->lchild);}if (pNode->rchild) //右孩子{nodeQueue.push(pNode->rchild);}}//如果结点为空并且队列非空,则是一行访问结束,下一行的入队列结束,因此压入一个空指针 //若队列也是空,则说明已访问完毕else if (nodeQueue.size()){nodeQueue.push(NULL);cout << endl;}}
}
可以看出我们通过设置了空节点来表示一层的结束,这样就可以很好的实现分层打印。
花样变形2:将二叉树分层打印的同时,将每层的数据保存下来
void levelTravel2(BTNode *bt)
{vector<vector<int>> result; //存放所有层的节点vector<int> cur; //存放每一层的节点if (bt == NULL){return;}queue<BTNode *> nodeQueue;nodeQueue.push(bt);nodeQueue.push(NULL); //放入空节点,作为层的结束符while (nodeQueue.size()){BTNode *pNode = nodeQueue.front(); //取队首元素nodeQueue.pop(); //必须出队列if (pNode) //该节点非空{cout << pNode->data << ' ';cur.push_back(pNode->data);if (pNode->lchild) //左孩子{nodeQueue.push(pNode->lchild);}if (pNode->rchild) //右孩子{nodeQueue.push(pNode->rchild);}}//如果结点为空并且队列非空,则是一行访问结束,下一行的入队列结束,因此压入一个空指针 //若队列也是空,则说明已访问完毕else {result.push_back(cur);cur.resize(0);if (nodeQueue.size())nodeQueue.push(NULL);cout << endl;}}//for (int i = 0; i < result.size(); i++)//{// vector<int>a = result[i];// for (int j = 0; j < a.size(); j++)// {// //cout << a[j] << ' ';// printf("%c ", a[j]);// }// cout << endl;//}
}
转载请注明出处:
CSDN:楼上小宇_home:http://blog.csdn.net/sty945
关于二叉树的层次遍历的花样(c++实现)相关推荐
- leetcode-102 二叉树的层次遍历
给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 返回其层 ...
- 【每日一算法】二叉树的层次遍历 II
每日一算法-二叉树的层次遍历 II 题目 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,n ...
- c++根据二叉树的层次遍历建立二叉树_LeetCode | 102.二叉树的层次遍历
这次来写一下 LeetCode 的第 102 题,二叉树的层次遍历. 题目描述 题目直接从 LeetCode 上截图过来,题目如下: 102.二叉树的层次遍历题目 上面的题就是 二叉树的层次遍历 题目 ...
- 七十七、 二叉树的层次遍历和最大深度
@Author:Runsen 在讲解二叉树的时候,提到二叉树的遍历除了前中后序遍历,还有层次遍历. 前中后序这三种遍历方法以及可以通过递归的方式实现了,那么今天就来讲讲层次遍历吧! 文章目录 Leet ...
- 二叉树的层次遍历_【腾讯面试热身题】二叉树层次遍历(动画展示)
二叉树的层次遍历同时涉及到树和队列两种数据结构的操作,因此大厂很喜欢用来作为面试的热身题.作者不少去腾讯的小伙伴,都反映,这种题一定要非常熟练,不然会被直接pass. 1 题目描述 给定一个二叉树,按 ...
- 数据结构——二叉树的层次遍历进阶
之前的一个博客 数据结构--二叉树的层次遍历看完这个,可以简单实现下面的问题 问题: 1.计算二叉树的最大宽度(二叉树的最大宽度是指二叉树所有层中结点个数的最大值. 2.用按层次顺序遍历二叉树的方法, ...
- 69. 二叉树的层次遍历Python实现
'''69. 二叉树的层次遍历 描述 给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)您在真实的面试中是否遇到过这个题? 样例 给一棵二叉树 {3,9,20,#,#,15,7} :3/ \ ...
- 二叉树层次遍历c语言_每日一道 LeetCode (23):二叉树的层次遍历 II
❝ 每天 3 分钟,走上算法的逆袭之路. ❞ 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub:https://github.com/meteor1993/LeetCode Gi ...
- leetcode 102 java_Java实现 LeetCode 102 二叉树的层次遍历
102. 二叉树的层次遍历 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / 9 20 ...
最新文章
- 梅尔频率倒谱系数(MFCC)资源
- 软件质量没有银弹:阿里巴巴的25个技术实践与坑
- Hive之 hive-1.2.1 + hadoop 2.7.4 集群安装
- 【AI不惑境】模型压缩中知识蒸馏技术原理及其发展现状和展望
- [MEGA DEAL] Ultimate SQL Bootcamp认证捆绑包(98%)
- JavaSE——常用类库(上)(泛型、Objects、Math、ArraysBigDecimal类)
- 23种设计模式之享元模式
- 《知识图谱》2020综述论文,18位作者, 130页pdf,547篇参考文献
- C++ Primer Plus 随记(第八章)
- Python:如何安装与使用 pip
- Spring(四):面向切面编程AOP
- JSONObject简单测试使用
- 2010年的20款游戏
- 怎么用spss做冗余分析_【攻略】手把手教你怎么用SPSS做统计分析
- 超强PHP集成开发工具:phpDesigner v7.2.1 最新版下载(附注册机)
- java 背单词系统_基于JAVA模拟背单词系统(含源文件)
- 戴德金--连续性和无理数--我自己做的中文翻译第1页
- 用freemarker生成word文档,并插入图片
- 苹果开放降级_苹果降级对手机有什么坏处
- linux 下vim中关于删除某段,某行,或全部删除的命令
热门文章
- linux/docker个人服务器项目中文变问号??,时间差8小时问题解决方法,最新,最有效
- Go 学习笔记(80)— Go 标准库 container/list(单链表、双链表)
- jieba分词流程及部分源码解读(一)
- Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))) TNS-12541: TNS:no li
- LeetCode中等题之重排数字的最小值
- 手机与Camera CCM技术发展趋势
- 2021年大数据Spark(三十九):SparkStreaming实战案例四 窗口函数
- C++ multimap 的使用
- android.mk 里面内容介绍
- postgreSQL外键引用查询 查询外键被那些表占用