c++根据二叉树的层次遍历建立二叉树_二叉树-层次遍历(C++)

c++根据二叉树的层次遍历建立二叉树_二叉树-层次遍历(C++)_第1张图片

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---


你可能感兴趣的:(判断二叉树是否为完全二叉树算法,设计程序实现二叉树的遍历。)