数据结构2叉数遍历Word文档下载推荐.docx
- 文档编号:17621451
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:15
- 大小:316.89KB
数据结构2叉数遍历Word文档下载推荐.docx
《数据结构2叉数遍历Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构2叉数遍历Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
一、实验前用预习报告纸撰写预习报告,预习报告包括以下内容
1.实验目的
2.实验用仪器设备、器材或软件环境
3.实验原理、方案设计、程序框图、预编程序等
4.实验过程中需要记录的实验数据表格
二、实验过程中,要认真观察,仔细记录
三、完成实验后用实验报告纸撰写实验报告,包括以下内容
1.仪器设备型号及编号
2.实验器材或软件环境
3.实验步骤、程序调试方法
4.实验数据处理及结果分析
5.实验中存在的问题
6.体会及思考题
四、报告撰写时,要求格式规范、书写整齐
预习报告成绩:
指导教师审核(签名):
年月
预习报告
实验二二叉树遍历算法的设计
一、目的
本实验的目的是理解二叉树的逻辑结构和二叉链表存储结构,进一步提高使用理论知识指导解决实际问题的能力,并对算法性能进行分析。
二、题目
二叉树遍历算法的设计。
三、实验类型
设计性。
方案一采用递归算法实现二叉树遍历算法。
方案二采用非递归算法实现二叉树遍历算法。
四、要求及提示
要求:
(1)两种算法以及各种基本操作(创建二叉树)定义为独立函数(注意函数接口的规定)。
(2)采用菜单驱动方式调用各种功能。
(3)用测试数据测试程序的正确性,如下面的二叉树:
(4)对同一棵二叉树,分别调用两种算法,单步跟综递归程序的执行过程并观察调用堆栈。
(5)分析算法的时间复杂度。
提示:
二叉链表可以采用数据类型定义:
typedefstructnode
{datatypedata;
//每个结点的数据域
structnode*lchild,*rchild;
//结点的左孩子指针域lchild,右孩子指针域rchild
}BinNode;
五、实验报告
1、写出每个算法的思想和关键代码。
2、画出算法流程图。
3、调试程序出现的问题及解决的方法。
4、报告给出测试的结果并写出设计体会。
5、列表对比分析两种算法的时间复杂度、空间复杂度,阐明产生差异的原因。
6、根据实例归纳将递归算法改写为非递归算法的步骤。
一:
流程图
先序遍历流程图:
中序遍历流程图:
后序遍历流程图:
递归代码:
#include<
stdio.h>
stdlib.h>
malloc.h>
{chardata;
structnode*lchild,*rchild;
BinNode*createbn()
{BinNode*q;
structnode*m[30];
intj,i,x;
printf("
建立二叉树,输入结点对应的编号和值\n"
);
i,x="
scanf("
%d,%c"
&
i,&
x);
while(i!
=0&
&
x!
=0)
{q=(BinNode*)malloc(sizeof(BinNode));
q->
data=x;
lchild=NULL;
q->
rchild=NULL;
m[i]=q;
if(i!
=1)
{j=i/2;
if(i%2==0)m[j]->
lchild=q;
elsem[j]->
rchild=q;
}
}
returnm[1];
}
voidBinNodePreorder(BinNode*bn)
{if(bn!
=NULL)
{printf("
%c"
bn->
data);
BinNodePreorder(bn->
lchild);
rchild);
voidBinNodeInorder(BinNode*bn)
{if(bn!
{BinNodeInorder(bn->
printf("
BinNodeInorder(bn->
voidBinNodePastorder(BinNode*bn)
{
if(bn!
voidmain()
{BinNode*bn;
intselect;
while(select)
{
1.建立二叉树\n"
2.二叉树的前序遍历\n"
3.二叉树的中序遍历\n"
4.二叉树的后序遍历\n"
0.结束程序\n"
scanf("
%d"
select);
switch(select)
{case1:
printf("
输入二叉树的结点值\n"
getchar();
bn=createbn();
printf("
二叉树已建立完成!
!
\n"
break;
case2:
该二叉树前序遍历序列为:
"
BinNodePreorder(bn);
case3:
该二叉树中序遍历序列为:
BinNodeInorder(bn);
case4:
该二叉树后序遍历序列为:
BinNodePastorder(bn);
case0:
;
}
实验结果:
非递归代码:
#defineMAXNUM100
{intdata;
输入结点对应的编号和值\n"
二叉树编号i="
i);
节点的值X="
if(i%2==0)m[j]->
}printf("
节点的值x="
{BinNode*stack[MAXNUM],*q;
inttop=1;
stack[top]=bn;
while(top>
=0)
{q=stack[top];
top--;
if(q!
{
q->
top++;
stack[top]=q->
rchild;
lchild;
{BinNode*stack[MAXNUM];
inttop=0;
do
{
while(stack[top]!
{top=top+1;
stack[top]=stack[top-1]->
top=top-1;
if(top>
{printf("
stack[top]->
stack[top]=stack[top]->
}while(top>
=0);
inttag[MAXNUM];
BinNode*n;
n=bn;
while(n!
{top++;
stack[top]=n;
tag[top]=0;
n=n->
{n=stack[top];
if(tag[top]==1)
{
printf("
top--;
n=stack[top];
}
if(top>
0)
if(tag[top]!
=1)
{n=n->
tag[top]=1;
}
elsen=NULL;
}while(top!
//printf("
二叉树的建立和非递归遍历\n"
case1:
建立完成...\n"
二叉树前序遍历序列为:
二叉树中序遍历序列为:
二叉树后序遍历序列为:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 遍历