Today,叨叨Chen继续给大家分享算法啦。层次遍历二叉树是大家再熟悉不过的二叉树操作了,看到这个算法通常会联想到队列,没错,叨叨Chen设计的层次遍历算法也是用到了队列(先进先出),下面一起进入算法游乐场吧。

It's show time!

Punchline-------------------------------------------------------------------

Task:用户以广义表的形式输入二叉树,以此创建二叉树,再通过层次遍历算法将二叉树输出,输出的结点之间用空格表示,行末不需要多余的空格。

Input:输入一行,以广义表的形式表示的二叉树。

Output:输出也是一行,为该二叉树按层次遍历的结果序列,每个元素之间用空格隔开,行末不需要多余的空格。

Realize:

  1. 创建二叉树(createTree):根据广义表的形式创建二叉树,那么会联想到用栈的方法;
  2. 层序遍历输出二叉树(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++)相关推荐

  1. 二叉树 奇偶行输出方向相反_二叉树中的奇偶级差

    二叉树 奇偶行输出方向相反 Problem statement: 问题陈述: Given a Binary Tree, write a function getLevelDiff which retu ...

  2. 遍历对象属性_细说JS遍历对象属性的N种方法

    本人详细介绍了JS遍历对象N种方法,欢迎关注收藏. 遍历对象属性有五种方法,下图为一个场景对比图. 可以注意到两点: 只有for ... in 才可以遍历原型链属性,且只能遍历可枚举属性. Objec ...

  3. 遍历文件夹_使用JavaScript遍历本地文件夹的文件

    This blog is written based on Chrome 45.0.2454.85 m. In HTML5 there is one additional attribute avai ...

  4. 二叉树的先序/中序/后序/层次遍历

    [简介] 树形结构是一类重要的非线性数据结构,其中以树和二叉树最为常用. 二叉树是每个结点最多有两个子树的有序树.通常子树的根被称作"左子树"(left subtree)和&quo ...

  5. (二叉树的动态创建与bfs)树的层次遍历

    题目: 例:输入一棵二叉树,你的任务是按从上到下,从左到右的顺序输出每一个节点的值.每个节点都按照从根节点到它的移动序列给出(L表示左,R表示右).在输入中,每个节点的左括号和右括号之间没有空格,相邻 ...

  6. 【算法学习笔记】二叉树的基本操作实现和应用举例,根据先序与中序遍历建立二叉树的实现

    基本操作 给某结点插入一个左孩子 删除二叉树中某结点的左子树 根据先序与中序遍历建立二叉树 应用举例 查找数据元素 二叉链表存储结构 统计叶结点的数目 基本操作 通常有:建立空二叉树.生成以X为根节点 ...

  7. 二叉树层次遍历c语言_[LeetCode] 107. 二叉树的层次遍历 II

    题目链接 : https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/ 题目描述: 给定一个二叉树,返回其节点值自底 ...

  8. LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍历建立二叉树 C++...

    LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍历建立二叉树 C++ Given preo ...

  9. 二叉树的基本操作(建立与遍历)

    [问题描述] 以二叉链表的形式创建二叉树(不超过20个结点),并编写二叉树的遍历算法,实现二叉树的先序.中序及后序三种遍历. [输入形式] 输入二叉树的结点信息(以先序遍历方式建立二叉树). [输出形 ...

最新文章

  1. js仿QQ中对联系人向左滑动、滑出删除按钮的操作
  2. 在SAP除了使用Cordova生产移动应用外,还有这种方式
  3. 梦中的统计(洛谷P1554题题解,Java语言描述)
  4. Python2.7 logging.config logging.handlers
  5. OSI参考模型(应用层、表示层、会话层、传输层、网络层、数据链路层、物理层)...
  6. 程序员:请不要对我的代码指手画脚!
  7. Nexus私服学习1
  8. c语言写识别电压的程序,PIC单片机C语言编程实例——交流电压测量
  9. Android趣味课程:超简单猜数游戏
  10. mt6735通用recovery_mt6735刷机包下载
  11. 民间计算机网络高手,高手在民间!牛人用Excel创作的惊人画作
  12. 工业触屏没有反应的原因?
  13. Linux操作系统基础之用户管理
  14. 数字电位器程控可调电阻IC
  15. 经典博弈论之3人分100枚金币
  16. AD19——实验室焊接QFP(pitch=0.5mm)的方法(SMT钢网+热风枪=良品率100%)
  17. Postman(07)Postman+OMySQL操作数据库
  18. lpv4的地址格式由多少个字节组成_2020年智慧树艺术品拍卖第八单元章节测试答案...
  19. 实验9:8X8LED点阵(点亮一个点)
  20. 【华人学者风采】李永旺 中国科学院

热门文章

  1. preference java_Java使用Preference类保存上一次记录的方法
  2. 判断一颗树是否为完全二叉树
  3. mysql mha reference_MySQL MHA配置常见问题
  4. Spring @Scheduled定时任务调度配置的详解
  5. IDEA中Maven项目中界面右边的Maven Projects中子项目出现灰色
  6. oracle执行计划没有执行索引,oracle理解执行计划之索引相关
  7. python绘制气象等值线图_利用Python插值绘制等值线图
  8. gan通过python实现_python通过requests库实现爬虫(二)
  9. Mysql Oracle Tidb对空值的处理
  10. 贴吧用html标签,html标签3(转载)