c++根据二叉树的层次遍历建立二叉树_二叉树-层次遍历(C++)
Today,叨叨Chen继续给大家分享算法啦。层次遍历二叉树是大家再熟悉不过的二叉树操作了,看到这个算法通常会联想到队列,没错,叨叨Chen设计的层次遍历算法也是用到了队列(先进先出),下面一起进入算法游乐场吧。
It's show time!
Punchline-------------------------------------------------------------------
Task:用户以广义表的形式输入二叉树,以此创建二叉树,再通过层次遍历算法将二叉树输出,输出的结点之间用空格表示,行末不需要多余的空格。
Input:输入一行,以广义表的形式表示的二叉树。
Output:输出也是一行,为该二叉树按层次遍历的结果序列,每个元素之间用空格隔开,行末不需要多余的空格。
Realize:
- 创建二叉树(createTree):根据广义表的形式创建二叉树,那么会联想到用栈的方法;
- 层序遍历输出二叉树(Layerprint):一层一层从左至右读取、获取数据,思路如下,
- 初始化队列,如果树不为空,则先将根结点入队,判断队列是否为空,进入循环;
- 在循环里,出队,读取数据;
- 输出空格,但需要判断情况,有三种情况:(1)当前队列不为空;(2)队列为空,但是出队列的结点有左孩子;(3)队列为空,但是出队列的结点有右孩子;【(2),(3)的情况可以举个例子更形象,比如当你将根结点入队后,紧接着又出队列读取数据,此时队列是空的,但是如果其有孩子,那么就应该继续输出空格。】
- 如果根结点有左孩子,则左孩子入队列;如果根结点有右孩子,则右孩子入队列,进入下一次循环。
----------------------------------------------------------------------Time---
//加载库;这里不再多说了,详细情况请看叨叨Chen的往期文章。
#include
note:这里使用宏定义来设置Max的值,是为了限制输入的广义表形式的最大长度。当然读者可以使用“const int Max=40;”,叨叨Chen使用宏定义是为了更加熟悉宏定义的本质含义——替换思想。
//定义树的结点(Node),链式队列的结点(QNode,Queue,可以这么理解,QNode是队列里存储元素值域和指针域的结构体,Queue是存储了两个指向QNode的指针的结构体,具体细节可自行查阅链式队列的资料。)
typedef
note:
- 为了更清楚理解结构体的相互使用,叨叨Chen这里没有使用结构体嵌套的方法,读者可以自己设计一下。这里可以很清楚的看到,QNode的结点里是存放的Node(树结点)类型的。
- 从工程的角度来说,读者可以将头文件和定义的结构体放在头文件(xxx.h)里,在源文件里加载头文件(#include"xxx.h";)即可。
//实现Task的功能如下:
//根据二叉树的广义表形式创建二叉树
//主函数
int
note:这里有读者会觉得cin.getline()没必要,但是请思考一个问题,如果用户只输入一个空格呢,这时候,如果用cin,鼠标会一直闪烁,不会进入程序的下一步,就没办法得到树为空的反馈。
嘿嘿嘿~快乐的时光总是短暂的,又到了。。。。。。
欢迎读者提出批评和建议,叨叨Chen会采取好的建议追加在文章后面,大家一起学习喔!
2020.10.09------------------------------------------------------------------It still comes---
c++根据二叉树的层次遍历建立二叉树_二叉树-层次遍历(C++)相关推荐
- 二叉树 奇偶行输出方向相反_二叉树中的奇偶级差
二叉树 奇偶行输出方向相反 Problem statement: 问题陈述: Given a Binary Tree, write a function getLevelDiff which retu ...
- 遍历对象属性_细说JS遍历对象属性的N种方法
本人详细介绍了JS遍历对象N种方法,欢迎关注收藏. 遍历对象属性有五种方法,下图为一个场景对比图. 可以注意到两点: 只有for ... in 才可以遍历原型链属性,且只能遍历可枚举属性. Objec ...
- 遍历文件夹_使用JavaScript遍历本地文件夹的文件
This blog is written based on Chrome 45.0.2454.85 m. In HTML5 there is one additional attribute avai ...
- 二叉树的先序/中序/后序/层次遍历
[简介] 树形结构是一类重要的非线性数据结构,其中以树和二叉树最为常用. 二叉树是每个结点最多有两个子树的有序树.通常子树的根被称作"左子树"(left subtree)和&quo ...
- (二叉树的动态创建与bfs)树的层次遍历
题目: 例:输入一棵二叉树,你的任务是按从上到下,从左到右的顺序输出每一个节点的值.每个节点都按照从根节点到它的移动序列给出(L表示左,R表示右).在输入中,每个节点的左括号和右括号之间没有空格,相邻 ...
- 【算法学习笔记】二叉树的基本操作实现和应用举例,根据先序与中序遍历建立二叉树的实现
基本操作 给某结点插入一个左孩子 删除二叉树中某结点的左子树 根据先序与中序遍历建立二叉树 应用举例 查找数据元素 二叉链表存储结构 统计叶结点的数目 基本操作 通常有:建立空二叉树.生成以X为根节点 ...
- 二叉树层次遍历c语言_[LeetCode] 107. 二叉树的层次遍历 II
题目链接 : https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/ 题目描述: 给定一个二叉树,返回其节点值自底 ...
- LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍历建立二叉树 C++...
LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍历建立二叉树 C++ Given preo ...
- 二叉树的基本操作(建立与遍历)
[问题描述] 以二叉链表的形式创建二叉树(不超过20个结点),并编写二叉树的遍历算法,实现二叉树的先序.中序及后序三种遍历. [输入形式] 输入二叉树的结点信息(以先序遍历方式建立二叉树). [输出形 ...
最新文章
- js仿QQ中对联系人向左滑动、滑出删除按钮的操作
- 在SAP除了使用Cordova生产移动应用外,还有这种方式
- 梦中的统计(洛谷P1554题题解,Java语言描述)
- Python2.7 logging.config logging.handlers
- OSI参考模型(应用层、表示层、会话层、传输层、网络层、数据链路层、物理层)...
- 程序员:请不要对我的代码指手画脚!
- Nexus私服学习1
- c语言写识别电压的程序,PIC单片机C语言编程实例——交流电压测量
- Android趣味课程:超简单猜数游戏
- mt6735通用recovery_mt6735刷机包下载
- 民间计算机网络高手,高手在民间!牛人用Excel创作的惊人画作
- 工业触屏没有反应的原因?
- Linux操作系统基础之用户管理
- 数字电位器程控可调电阻IC
- 经典博弈论之3人分100枚金币
- AD19——实验室焊接QFP(pitch=0.5mm)的方法(SMT钢网+热风枪=良品率100%)
- Postman(07)Postman+OMySQL操作数据库
- lpv4的地址格式由多少个字节组成_2020年智慧树艺术品拍卖第八单元章节测试答案...
- 实验9:8X8LED点阵(点亮一个点)
- 【华人学者风采】李永旺 中国科学院
热门文章
- preference java_Java使用Preference类保存上一次记录的方法
- 判断一颗树是否为完全二叉树
- mysql mha reference_MySQL MHA配置常见问题
- Spring @Scheduled定时任务调度配置的详解
- IDEA中Maven项目中界面右边的Maven Projects中子项目出现灰色
- oracle执行计划没有执行索引,oracle理解执行计划之索引相关
- python绘制气象等值线图_利用Python插值绘制等值线图
- gan通过python实现_python通过requests库实现爬虫(二)
- Mysql Oracle Tidb对空值的处理
- 贴吧用html标签,html标签3(转载)