1.实验目的:
掌握二叉树的结构特性以及二叉链表的存储结构的特点及适用范围。同时,掌握用指针类型描述、访问和处理二叉树的运算。

2.试验问题:
建立一棵二叉树,按层次遍历该二叉树,并显示出这棵二叉树。要求:以二叉链表作为存储结构,按层次遍历创建一棵二叉树,从键盘接收输入结点,用“A”,“B”,“C”,…来表示非空结点,用“*”来表示空结点,以“#”号结束,对此二叉树进行层次遍历并将遍历结果输出。

3.解题思路:
非递归层次遍历二叉树的算法基本思想:由层次遍历的定义可知,层次遍历是从根结点开始访问,然后访问它的左孩子和右孩子,接下来是它左孩子的左孩子和右孩子,右孩子的左孩子和右孩子,……,在访问完某个结点后,一般不能马上访问它的左孩子和右孩子(除根结点等特殊情况外),需要把它的左右孩子信息保存起来。这种方式正好与队列的操作特点吻合,所以可利用一个队列结构来实现层次遍历,其做法是:
1)首先将根结点入队列;
2)当队列不空,从对列中取出对头结点访问它,并在其左右孩子非空时,把它的左孩子和右孩子结点依次入队列;
3)反复执行同样操作,直到队列为空时止。
用一维数组queue[MAXSIZE]实现循环队列,变量front和rear为分别表示对头指针和队尾指针的指示器变量,并假定队列有足够的空间不会发生上溢。

4.程序实现:

#include "stdio.h"
#include "malloc.h"
#include "conio.h"
#define MAXSIZE 100
typedef char elemtype;typedef struct btnode
{elemtype data;struct btnode *lchild,*rchild;
}bitnode,*bitree;typedef struct nodd
{bitree addr;int parent;
}sequre;bitree ins_node(bitree s,bitree t);
void print_tree(bitree t);
bitree create_ordbt();
sequre seq[MAXSIZE];
int n=0;bitree create_ordbt()
{bitree t,s;elemtype x;t=NULL;printf("请按层次顺序输入结点1的值(以#号结束,*号为空的结点):\n");scanf("%c",&x);getchar();while(x!='#'){n++;if(x!='*'){s=(bitree)malloc(sizeof(bitnode));s->data=x;s->lchild=NULL;s->rchild=NULL;seq[n].addr=s;t=ins_node(s,t);}elseseq[n].addr=NULL;printf("请输入结点%d的值(以#号结束,*号为空结点):\n",n+1);x=getche();getchar();}return t;
}bitree ins_node(bitree s,bitree t)
{int kk;if(n==1)t=s;else{kk=n/2;if(n%2==0)seq[kk].addr->lchild=s;elseseq[kk].addr->rchild=s;}return t;
}void print_tree(bitree t)
{int i,j,k,nn,start,head,rear;sequre seqq[MAXSIZE];bitree p;if(t==NULL)return;head=0;nn=rear=0;seqq[rear].addr=t;for(;head<=rear && nn<MAXSIZE; head++){p=seqq[head].addr;if(p->lchild!=NULL)seqq[++rear].addr=p->lchild;if(p->rchild!=NULL)seqq[++rear].addr=p->rchild;}for(head=0,j=1,k=1;head <=rear;){printf("\n第%d层数据:",j);for(i=0,start=head;head<start+k;head++){printf("%c  ",seqq[head].addr->data);if(seqq[head].addr->lchild==NULL)i=i-1;if(seqq[head].addr->rchild==NULL)i=i-1;}k=k*2+i;j++;}
}main()
{bitree tree;tree=create_ordbt();print_tree(tree);
}

5.测试数据:

数据结构(三)打印二叉树中结点层次遍历序列的实现相关推荐

  1. 【剑指 offer】(二十三)—— 从上往下打印二叉树(或曰层次遍历、广度优先遍历)

    从广度优先到深度优先,只差一个数据结构. 从上往下打印二叉树,实质是在考察树的遍历问题,显然不同于更为经典的先序.中序和后序遍历,而属于一种层次遍历,或曰广度优先遍历. 二叉树节点的定义如下: str ...

  2. 二叉树(前序遍历序列、中序遍历序列、后序遍历序列、层次遍历序列、深度、叶子数)

    Description 已知二叉树的一个按前序遍历输入的字符序列,如abc,de,g,f, (其中,表示空结点).请建立二叉树,并输出建立二叉树的前序遍历序列.中序遍历序列.后序遍历序列.层次遍历序列 ...

  3. 数据结构实验之二叉树五:层序遍历 // oj3344 队列+二叉树 // 先序 --层次

    原题链接:oj3344 数据结构实验之二叉树五:层序遍历 Description 已知一个按先序输入的字符序列,如abd,eg,cf,(其中,表示空结点).请建立二叉树并求二叉树的层次遍历序列. In ...

  4. 由序列确定二叉树:前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 代码实现(c语言)

    下面三种序列可以唯一的构造唯一的一棵二叉树: 前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 #include<stdio.h> #inc ...

  5. 数据结构实验之二叉树五:层序遍历(STL和模拟队列两种方法)

    Description 已知一个按先序输入的字符序列,如abd,eg,cf,(其中,表示空结点).请建立二叉树并求二叉树的层次遍历序列. Input 输入数据有多行,第一行是一个整数t (t<1 ...

  6. 3344 数据结构实验之二叉树五:层序遍历

    数据结构实验之二叉树五:层序遍历 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 已知一个按先序输入的字符序列,如abd,,e ...

  7. 数据结构实验之二叉树五:层序遍历

    题目描述 已知一个按先序输入的字符序列,如abd,,eg,,,cf,,,(其中,表示空结点).请建立二叉树并求二叉树的层次遍历序列. 输入  输入数据有多行,第一行是一个整数t (t<1000) ...

  8. 用数学归纳法证明二叉树的先序遍历序列和中序遍历序列可以唯一确定一颗二叉树

    用数学归纳法证明二叉树的先序遍历序列和中序遍历序列可以唯一确定一颗二叉树. 首先说明:思想来自文都考研洪老师.包括逻辑框架的搭建,此篇文章为框架搭建完成后将细节补充完整. 首先,用到的数学的证明思想是 ...

  9. 数据结构第七章实验题3-由遍历序列构造二叉树

    实验题3-由遍历序列构造二叉树 目的:领会二叉树的构造过程以及构浩二叉树的算法设计 内容:内容:编写一个程序exp7-3.cpp,实现由先序序列和中序序列以及由中序序列和后序序列构造一棵二叉树的功能( ...

最新文章

  1. C#调用C++dll
  2. 采用web技术开发PC应用
  3. [Link]选择一个 Python Web 框架:Django vs Flask vs Pyramid
  4. 关于秒杀的系统架构优化思路
  5. 风雨萧关道【电视专题片解说词】
  6. 海贝音频384khz_海贝音乐app下载_海贝音乐安卓版下载[音乐播放器]-下载之家
  7. 【交互设计】什么是微交互
  8. 查看SEM竞价外地排名的方法
  9. 【广州数据报表中心怎么样】什么样的大数据
  10. 【2022/02/02】thinkphp源码详细阅读(一)
  11. 大数据分析工程师入门15-数据收集
  12. 一步一步入门机器学习之一:Python(x,y)下载,安装,使用入门
  13. POI导出Excel设置单元格背景色
  14. 五款PPT的素材黑科技
  15. Web全栈 第九周-曾老师-专题视频课程
  16. c语言中pair的头文件,C++中使用pair是否一定要包含头文件utility
  17. 修改iphone联系人头像
  18. 微信小程序:好玩多功能实用工具箱
  19. vim 光标快速移动技巧总结(vim高级操作的基础)from csdner 亓磊
  20. IDEA 导入jar包和使用jar包方法

热门文章

  1. iOS密码管理Keychain的使用
  2. C语言十六进制转八进制
  3. lstm模型_基于LSTM模型的学生反馈文本学业情绪识别方法
  4. 网易邮箱登录页面html5布局,css实现tab效果仿163邮箱样式
  5. 英特尔暂缓扩建大连芯片厂 或吞并全球最大芯片生厂商之一美光科技
  6. php 微信 ca证书出错,升级CA颁发的证书后微信退款、红包等无法使用
  7. 甲方乙方中的深刻哲理
  8. java微信红包_Java模拟微信发红包(普通红包、拼手气红包)
  9. 《数据结构与抽象:Java语言描述(原书第4版)》一2.1.7 删除项的方法
  10. s5pv210的工作模式