数据结构第三次实验

合集下载

哈尔滨理工大学数据结构第3次实践课内容

哈尔滨理工大学数据结构第3次实践课内容

必做●SubString (&Sub, S, pos, len)求子串●Index (S, T, pos)字符串查找#include <stdio.h>#include <stdlib.h>#define INTERLENGTH 100#define INCREASE 10#define OK 1#define ERROR -1#define overflow -2typedef struct{char *data;int length;int size;}Sqlist;int cj(Sqlist &L){L.data=(char *)malloc(INTERLENGTH*sizeof(char));if(L.data==NULL)exit(overflow);L.length=0;L.size=INTERLENGTH;return OK;}int AgainMalloc(Sqlist &L){char *newbase;newbase=(char *)realloc(L.data,(INCREASE+L.size)*sizeof(char)); if(newbase==NULL)exit(overflow);L.data=newbase;L.size+=INCREASE;return OK;}int insert(Sqlist &L,char a){if(L.length==L.size){AgainMalloc(L);}L.data[L.length]=a;L.length++;return OK;int travel(Sqlist &L){for(int i=0;i<L.length;i++)printf("%c",L.data[i]);printf("\n");return OK;}int clear(Sqlist &L){L.length=0;return OK;}int SubString(Sqlist &L,int pos,int len,Sqlist &sub) {if(pos<1||pos>L.length||len<0||len>L.length-pos+1) {printf("²»ºÏ·¨ ");exit(overflow);}cj(sub);clear(sub);int i;for(i=pos-1;i<pos+len-1;i++){insert(sub,L.data[i]);}return OK;}int index(Sqlist &L,Sqlist &sub){int i=0;int j=0;while(i<L.length&&j<sub.length){if(L.data[i]==sub.data[j]){i++;j++;}else{i=i-j+1;j=0;}}if(j>=sub.length)return i-sub.length+1;elsereturn ERROR;}int main(){Sqlist L,sub;cj(L);char c;printf("请输入字符串:\n");while((c=getchar())!='\n'){insert(L,c);}printf("求得从2位置开始4位自串如下:\n"); SubString(L,2,4,sub);travel(sub);clear(sub);printf("请输入待查找字符串;\n");while((c=getchar())!='\n'){insert(sub,c);}int a= index(L,sub);printf("%d",a);}。

数据结构实验报告三

数据结构实验报告三

数据结构实验报告三数据结构实验报告三引言:数据结构是计算机科学中的重要内容之一,它研究的是如何组织和存储数据以便高效地访问和操作。

本实验报告将介绍我在数据结构实验三中的实验过程和结果。

实验目的:本次实验的主要目的是熟悉并掌握树这种数据结构的基本概念和操作方法,包括二叉树、二叉搜索树和平衡二叉树等。

实验内容:1. 实现二叉树的创建和遍历在本次实验中,我首先实现了二叉树的创建和遍历。

通过递归的方式,我能够方便地创建一个二叉树,并且可以使用前序、中序和后序遍历方法对二叉树进行遍历。

这些遍历方法的实现过程相对简单,但能够帮助我们更好地理解树这种数据结构的特点。

2. 实现二叉搜索树的插入和查找接下来,我实现了二叉搜索树的插入和查找操作。

二叉搜索树是一种特殊的二叉树,它的左子树上的节点的值都小于根节点的值,右子树上的节点的值都大于根节点的值。

通过这种特性,我们可以很方便地进行插入和查找操作。

在实现过程中,我使用了递归的方法,通过比较节点的值来确定插入的位置或者进行查找操作。

3. 实现平衡二叉树的插入和查找平衡二叉树是为了解决二叉搜索树在某些情况下可能会退化成链表的问题而提出的。

它通过在插入节点的过程中对树进行旋转操作来保持树的平衡。

在本次实验中,我实现了平衡二叉树的插入和查找操作。

通过对树进行左旋、右旋等操作,我能够保持树的平衡,并且能够在O(log n)的时间复杂度内进行插入和查找操作。

实验结果:通过本次实验,我成功地实现了二叉树、二叉搜索树和平衡二叉树的相关操作。

我编写了测试代码,并对代码进行了测试,结果表明我的实现是正确的。

我能够正确地创建二叉树,并且能够使用前序、中序和后序遍历方法进行遍历。

对于二叉搜索树和平衡二叉树,我能够正确地进行插入和查找操作,并且能够保持树的平衡。

实验总结:通过本次实验,我深入了解了树这种数据结构的特点和操作方法。

二叉树、二叉搜索树和平衡二叉树是树的重要应用,它们在实际开发中有着广泛的应用。

数据结构实验-第3次试验-图的应用

数据结构实验-第3次试验-图的应用
第三次实验 图的应用
[问题描述] 给定一个图,设计一个程序,找出一条从某一顶点A到另一顶点B边数最少的一条路径。 [输入] 图的顶点个数N,图中顶点之间的边的关系及要找的路径的起点A和终点B。 [输出] 若A到B无路径,则输出“There is no path”,否则输出A到B路径上各顶点。 [存储结构] 图采用邻接矩阵或邻接表的方式存储。
实现时采用队列记录被访问过的顶点。每次访问与队头顶点
相邻接的顶点,然后将队头顶点从队列中删去。若队空,则说明到
不存在通路。在访问顶点过程中,每次把当前顶点的序号作为与其 邻接的未访问的顶点的前驱顶点记录下来,以便输出时回溯。
Байду номын сангаас
[算法的基本思想] 采用广度优先搜索的方法,从顶点A开始,依次访问与A邻接的顶 点VA1,VA2,...,VAK, 访问遍之后,若没有访问B,则继续访问与VA1邻 接的顶点VA11,VA12,...,VA1M,再访问与VA2邻接顶点...,如此下去 ,直至找到B,最先到达B点的路径,一定是边数最少的路径。

数据结构实验三实验报告

数据结构实验三实验报告

数据结构实验三实验报告数据结构实验三实验报告一、实验目的本次实验的目的是通过实践掌握树的基本操作和应用。

具体来说,我们需要实现一个树的数据结构,并对其进行插入、删除、查找等操作,同时还需要实现树的遍历算法,包括先序、中序和后序遍历。

二、实验原理树是一种非线性的数据结构,由结点和边组成。

树的每个结点都可以有多个子结点,但是每个结点只有一个父结点,除了根结点外。

树的基本操作包括插入、删除和查找。

在本次实验中,我们采用二叉树作为实现树的数据结构。

二叉树是一种特殊的树,每个结点最多只有两个子结点。

根据二叉树的特点,我们可以使用递归的方式实现树的插入、删除和查找操作。

三、实验过程1. 实现树的数据结构首先,我们需要定义树的结点类,包括结点值、左子结点和右子结点。

然后,我们可以定义树的类,包括根结点和相应的操作方法,如插入、删除和查找。

2. 实现插入操作插入操作是将一个新的结点添加到树中的过程。

我们可以通过递归的方式实现插入操作。

具体来说,如果要插入的值小于当前结点的值,则将其插入到左子树中;如果要插入的值大于当前结点的值,则将其插入到右子树中。

如果当前结点为空,则将新的结点作为当前结点。

3. 实现删除操作删除操作是将指定的结点从树中移除的过程。

我们同样可以通过递归的方式实现删除操作。

具体来说,如果要删除的值小于当前结点的值,则在左子树中继续查找;如果要删除的值大于当前结点的值,则在右子树中继续查找。

如果要删除的值等于当前结点的值,则有三种情况:- 当前结点没有子结点:直接将当前结点置为空。

- 当前结点只有一个子结点:将当前结点的子结点替代当前结点。

- 当前结点有两个子结点:找到当前结点右子树中的最小值,将其替代当前结点,并在右子树中删除该最小值。

4. 实现查找操作查找操作是在树中寻找指定值的过程。

同样可以通过递归的方式实现查找操作。

具体来说,如果要查找的值小于当前结点的值,则在左子树中继续查找;如果要查找的值大于当前结点的值,则在右子树中继续查找。

国家开放大学《数据结构》课程实验报告(实验3 ——栈、队列、递归设计)参考答案

国家开放大学《数据结构》课程实验报告(实验3 ——栈、队列、递归设计)参考答案
{
x=Pop(s); /*出栈*/
printf("%d ",x);
InQueue(sq,x); /*入队*/
}
printf("\n");
printf("(10)栈为%s,",(StackEmpty(s)?"空":"非空"));
printf("队列为%s\n",(QueueEmpty(sq)?"空":"非空"));
ElemType Pop(SeqStack *s); /*出栈*/
ElemType GetTop(SeqStack *s); /*取栈顶元素*/
void DispStack(SeqStack *s); /*依次输出从栈顶到栈底的元素*/
void DispBottom(SeqStack *s); /*输出栈底元素*/
} SeqQueue; /*定义顺序队列*/
void InitStack(SeqStack *s); /*初始化栈*/
int StackEmpty(SeqStack *s); /*判栈空*/
int StackFull(SeqStack *s); /*判栈满*/
void Push(SeqStack *s,ElemType x); /*进栈*/
sq=(SeqQueue *)malloc(sizeof(SeqQueue));
InitQueue(sq);
printf("(8)队列为%s\n",(QueueEmpty(sq)?"空":"非空"));
printf("(9)出栈/入队的元素依次为:");

北邮数据结构第三次实验-实验报告

北邮数据结构第三次实验-实验报告

数据结构实验报告实验名称:实验三——栈和队列学生姓名:班级:班内序号:学号:日期:1.实验要求1.1 实验目的通过选择下面两个题目之一进行实现,掌握如下内容:➢掌握二叉树基本操作的实现方法➢了解赫夫曼树的思想和相关概念➢学习使用二叉树解决实际问题的能力1.2 实验内容根据二叉树的抽象数据类型的定义,使用二叉链表实现一个二叉树。

二叉树的基本功能:1、二叉树的建立2、前序遍历二叉树3、中序遍历二叉树4、后序遍历二叉树5、按层序遍历二叉树6、求二叉树的深度7、求指定结点到根的路径8、二叉树的销毁9、其他:自定义操作编写测试main()函数测试线性表的正确性2. 程序分析2.1 二叉链表2.2 二叉树的二叉链表存储示意图2.3 关键算法分析2.3.1算法1:void create(Binode<T> *&R, T data[], int i);[1] 算法功能:创建一个二叉树[2] 算法基本思想:通过构造函数创建一个二叉树,构造函数通过调用函数create()创建二叉树,关于函数create()的伪代码:1.定义根指针,输入节点储存的data,若输入“#”,则该节点为空;2.申请一个新节点,判断它的父结点是否不为空,如果不为空在判断其为左或者右孩子,并把地址付给父结点,把data写入。

[3] 算法空间、时间复杂度:O(n)[4] 代码逻辑(可用伪代码描述):if(data[i-1]!=0){R = new Binode<T>;R->data= data[i-1];R->lch = R->rch = NULL;create(R->lch, data,2*i);create(R->rch, data, 2*i+1);}2.3.2算法2:void Destroy(Binode<T> *R);[1] 算法功能:二叉树的销毁[2] 算法基本思想:采用后序遍历的方法,释放节点。

第三次数据结构课程实验

第三次数据结构课程实验
注意>>>
1. 第三次作业的提交截止时间为:11月23日晚20:00。

一、编写一个程序,实现由先序遍历序列和中序遍历序列构造一棵二叉树,要求用凹入表示法输出该二叉树。

二叉树用二叉链表结构存储。

用后序遍历对此二叉树各结点进行访问,用1、2、3、顺序替换相应结点中的字符,并输出相关的字符和数字。

先序序列:A B D F G E H I C J L N K N O
中序序列:F D G B H E I A L J M C N K O
根据这两个序列构造二叉树来验证程序,后面的题目用到的二叉树均用这个二叉树来验证。

凹入表示法输出, 比如给定一棵二叉树
a
/ \
b c
/ \ / \
d e f g
凹入表示法输出结果为:
a
b
d
e
c
f
g
第二个输出要求后序遍历二叉树,并将结果顺序输出,
例如:
如果后序遍历的结果为:ABCDEFG
则输出1A 2B 3C 4D 5E 6F 7G
二、设计将二叉链表存储的二叉树转换为一维数组结构的算法,并输出这个数组,空值则用NULL代替。

并以第一题中实验数据来验证。

例如给定一棵二叉树
a
/ \
b c
/ \
d f
输出: a b c d null null f。

数据结构第三次实验报告概况

实验报告
2013-2014 学年第 1 学期 任课老师: 刘安丰 课程名称 实验名称 实验环境 C++ 实验目的和内容要求 数据结构 班级 学号 实验时间 姓名 12 月 5 号
实验三
图的操作算法
作算法
实现图的常用操作算法:包括建立图的存储结构、深度优先搜索和广度优先搜索,求图 的最小生成树、拓扑排序、最短路径等。 二、实验目的 1.掌握图的基本存储方法。 2.掌握有关图的操作算法并用高级语言实现。 3.熟练掌握图的两种搜索路径的遍历方法。 4. 掌握图的有关应用。
G.arcs[j][i].adj = G.arcs[i][j].adj; } return OK; } int LocateVex(MGraph G,char ch) //确定节点 ch 在图 G.vexs 中的位置 { int a ; for(int i=0; i<G.vexnum; i++) { if(G.vexs[i] == ch) a=i; } return a; } //typedef struct Pnode //用于普利姆算法 //{ // char adjvex; //节点 // double lowcost; //权值 //}Pnode,Closedge[MAX_VERTEX_NUM]; //记录顶点集 U 到 V-U 的代价最小的边的辅助数组定义 void MiniSpanTree_PRIM(MGraph G,char u)//普利姆算法求最小生成树 { int i,j,k; Closedge closedge; k = LocateVex(G,u); for(j=0; j<G.vexnum; j++) { if(j != k) { closedge[j].adjvex = u; closedge[j].lowcost = G.arcs[k][j].adj; } } closedge[k].lowcost = 0; for(i=1; i<G.vexnum; i++) { k = Minimum(G,closedge); cout<<"("<<closedge[k].adjvex<<","<<G.vexs[k]<<","<<closedge[k].lowcost<<")"<<endl; closedge[k].lowcost = 0; for(j=0; j<G.vexnum; ++j) { if(G.arcs[k][j].adj < closedge[j].lowcost) { closedge[j].adjvex = G.vexs[k]; closedge[j].lowcost= G.arcs[k][j].adj; } } }

北邮数据结构实验报告实验三哈夫曼

北邮数据结构实验报告实验三哈夫曼数据结构实验报告实验名称:实验三——哈夫曼编/解码器的实现学⽣姓名:侯在鹏班级: 2012211120班内序号: 13学号:2012210583⽇期:2013年12⽉10⽇1.实验要求利⽤⼆叉树结构实现赫夫曼编/解码器。

基本要求:1、初始化(Init):能够对输⼊的任意长度的字符串s进⾏统计,统计每个字符的频度,并建⽴赫夫曼树2、建⽴编码表(CreateTable):利⽤已经建好的赫夫曼树进⾏编码,并将每个字符的编码输出。

3、编码(Encoding):根据编码表对输⼊的字符串进⾏编码,并将编码后的字符串输出。

4、译码(Decoding):利⽤已经建好的赫夫曼树对编码后的字符串进⾏译码,并输出译码结果。

5、打印(Print):以直观的⽅式打印赫夫曼树(选作)6、计算输⼊的字符串编码前和编码后的长度,并进⾏分析,讨论赫夫曼编码的压缩效果。

测试数据:I love data Structure, I love Computer。

I will try my best to study data Structure.提⽰:1、⽤户界⾯可以设计为“菜单”⽅式:能够进⾏交互。

2、根据输⼊的字符串中每个字符出现的次数统计频度,对没有出现的字符⼀律不⽤编码。

2. 程序分析2.1 存储结构程序实现了基本的编解码功能输⼊字符串选择⼯作⽬标编码解码相关树,表显⽰编码上根节点向下,左0右1根据不同字符在尾端相应排位,获得⾃⼰的编码,存储。

解码上依次读取数据0或1,循序寻找,最后在存储中找到对应编码的字符,输出再重新读取下⼀数字开始的数码在哈夫曼树编码这个程序中,所有数据⽤的存储结构都是顺序存储结构,其中包括顺序表和树(三叉树)树的存储结构如下:(输⼊的字符串为assddddffffffffgggggggggggggggg)上结构图中,填充为黄⾊的部分为写⼊内存中的部分。

每⼀⾏的部分为数组的下标,左边部分为所定义的结构的成员。

《数据结构》实验3链表

二、源代码以及输入数据输出结果为:
三、源代码以及实验结果为
四、源代码以及实验结果为
五、源代码以及实验结果为
六、源代码以及实验结果为
七、附加题以及实验体会:
{
NODE *s; /*定义指向结点类型的指针*/
s=(NODE *)malloc(sizeof(NODE));
/*生成新结点*/
3
4
5
return 1;
}
/*删除P所指向的结点的后继结点*/
void DelLinkList(NODE *p)
{ NODE *q;
if(p->next!=0)
{ q=p->next; /* q指向p的后继结点*/
ch=getchar();
while(ch!='$')
{ p=(NODE *)malloc(sizeof(NODE));
p->data=ch;
1
2
ch=getchar();
}
return (head);
}
/*在链表的P指定结点之后插入值为x的结点*/
int InsLinkList(NODE *p, char x)
四、设有两个单链表A、B,其中元素递增有序,编写算法将A、B归并成一个按元素值递减(允许有相同值)有序的链表C,要求用A、B中的原结点形成,不能重新申请结点。
五、已知单链表表示的线性表中含有两类的数据元素(字母字符,数字字符)。试设计算法,按结点的值将单链表拆分成两个循环链表,分别只含有数字或字母。要求:利用原表中的结点空间作为这两个表的结点空间,头结点可另开辟空间。
附加题:如果换成循环单链表该如何实现?
即题目变成:已知单循环链表表示的线性表中含有两类的数据元素(字母字符,数字字符)。试设计算法,按结点的值将单链表拆分成两个循环链表,分别只含有数字或字母。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验四树的操作与应用【实验目的】1.熟练掌握二叉树的二叉链表存储结构2.掌握二叉树的非线性和递归性特点3.熟练掌握二叉树的递归遍历操作的实现方法,掌握二叉树的非递归遍历操作的实现4.加深对二叉树结构和性质的理解,逐步培养解决实际问题的编程能力【实验内容】1.定义二叉树的链式存储结构;2.实现二叉树的基本操作:建空树、销毁二叉树、生成二叉树(先序,中序或后序)、判二叉树是否为空、3.求二叉树的深度、求二叉树的根等基本算法;4.实现二叉树的递归(先序、中序或后序)遍历算法;【实验指导】1.首先将二叉树的链式存储结构定义放在一个头文件:如取名为BinTreeDef.h。

2.将二叉树的基本操作算法也集中放在一个文件之中,如取名为BinTreeAlgo.h。

包含关于二叉树的链式结构操作的一些基本算法,如:InitBiTree、DestroyBiTree、CreateBiTree、BiTreeEmpty、BiTreeDepth、Root、PreOrderTraverse、InOrderTraverse 等。

3.将函数的测试和主函数组合成一个文件,如取名为BinTreeUse.cpp。

利用二叉树的链式存储结构,设计一组输入数据(假定为一组整数或一组字符),能够对二叉树进行如下操作:1.创建一棵空二叉树;2.对一棵存在的二叉树进行销毁;3.根据输入某种遍历次序输入二叉树中结点的值,依序建立二叉树;4.判断某棵二叉树是否为空;5.求二叉树的深度;6.求二叉树的根结点,若为空二叉树,则返回一特殊值;7.二叉树的遍历,即按某种方式访问二叉树中的所有结点,并使每个结点恰好被访问一次;8.编写主程序,实现对各不同的算法调用;实现要求如下:“构造空二叉树算法”操作结果:构造一个空二叉树T;“销毁二叉树算法”初始条件: 二叉树T 存在;操作结果: 销毁二叉树T ;“创建二叉树算法”初始条件:可以根据先序、中序和后序输入二叉树中结点的值(可为字符型或整型);操作结果: 以选择的某种次序建立二叉树T ;“判二叉树是否为空算法”初始条件: 二叉树T 存在;操作结果: 若T 为空二叉树,则返回TRUE,否则FALSE ;“求二叉树的深度算法”初始条件: 二叉树T 存在;操作结果: 返回T 的深度;“求二叉树的根算法”初始条件: 二叉树T 存在;操作结果: 返回T 的根;“先序递归遍历算法”初始条件: 二叉树T 存在,Visit 是对结点操作的应用函数;操作结果: 先序递归遍历T,对每个结点调用函数Visit 一次且仅一次;“中序递归遍历算法”初始条件: 二叉树T 存在,Visit 是对结点操作的应用函数;操作结果: 中序递归遍历T,对每个结点调用函数Visit 一次且仅一次;“后序递归遍历算法”初始条件: 二叉树T 存在,Visit 是对结点操作的应用函数;操作结果: 后序递归遍历T,对每个结点调用函数Visit 一次且仅一次;长春大学计算机科学技术学院实验报告日期_______________ 地点______________ 指导教师_____________ 成绩实验四树的操作与应用利用二叉树的链式存储结构,设计一组输入数据(假定为一组整数或一组字符),能够对二叉树进行如下操作:1.创建一棵空二叉树;2.对一棵存在的二叉树进行销毁;3.根据输入某种遍历次序输入二叉树中结点的值,依序建立二叉树;4.判断某棵二叉树是否为空;5.求二叉树的深度;6.求二叉树的根结点,若为空二叉树,则返回一特殊值;7.二叉树的遍历,即按某种方式访问二叉树中的所有结点,并使每个结点恰好被访问一次;实现过程:1、文件pubuse.h,与实验一相同;2.文件BinTreeDef.h 中实现了二叉树的链式存储结构定义typedef struct BiTNode{TElemType data;struct BiTNode *lchild,*rchild;/* 左右孩子指针*/}BiTNode,*BiTree;3.文件BinTreeAlgo.h 中实现二叉树的基本操作(存储结构由BinTreeDef.h 定义)Status InitBiTree(BiTree &T){ /* 操作结果: 构造空二叉树T */T=NULL;return OK;}void DestroyBiTree(BiTree &T){ /* 初始条件: 二叉树T 存在。

操作结果: 销毁二叉树T */if(T) /* 非空树*/{if(T->lchild) /* 有左孩子*/DestroyBiTree(T->lchild);/* 销毁左孩子子树*/if(T->rchild) /* 有右孩子*/DestroyBiTree(T->rchild);/* 销毁右孩子子树*/free(T);/* 释放根结点*/T=NULL;/* 空指针赋0 */}}#define ClearBiTree DestroyBiTreevoid CreateBiTree(BiTree &T){ /* 按先序次序输入二叉树中结点的值,构造二叉链表表示的二叉树T。

变量Nil 表示空(子)树。

*/TElemType ch;scanf("%d",&ch);if(ch==Nil) /* 空*/T=NULL;else{T=(BiTree)malloc(sizeof(BiTNode));if(!T)exit(OVERFLOW);T->data=ch;/* 生成根结点*/CreateBiTree(T->lchild);/* 构造左子树*/CreateBiTree(T->rchild);/* 构造右子树*/}Status BiTreeEmpty(BiTree T){ /* 初始条件: 二叉树T 存在*//* 操作结果: 若T 为空二叉树,则返回TRUE,否则FALSE */if(T)return FALSE;elsereturn TRUE;}int BiTreeDepth(BiTree T){ /* 初始条件: 二叉树T 存在。

操作结果: 返回T 的深度*/int i,j;if(!T)return 0;if(T->lchild)i=BiTreeDepth(T->lchild);elsei=0;if(T->rchild)j=BiTreeDepth(T->rchild);elsej=0;return i>j?i+1:j+1;}TElemType Root(BiTree T){ /* 初始条件: 二叉树T 存在。

操作结果: 返回T 的根*/if(BiTreeEmpty(T))return Nil;elsereturn T->data;}void PreOrderTraverse(BiTree T,Status(*Visit)(TElemType)){ /* 初始条件: 二叉树T 存在,Visit 是对结点操作的应用函数。

*//* 操作结果: 先序递归遍历T,对每个结点调用函数Visit 一次且仅一次*/ if(T) /* T 不空*/{Visit(T->data);/* 先访问根结点*/PreOrderTraverse(T->lchild,Visit);/* 再先序遍历左子树*/ PreOrderTraverse(T->rchild,Visit);/* 最后先序遍历右子树*/}}void InOrderTraverse(BiTree T,Status(*Visit)(TElemType)){ /* 初始条件: 二叉树T 存在,Visit 是对结点操作的应用函数*//* 操作结果: 中序递归遍历T,对每个结点调用函数Visit 一次且仅一次*/ if(T){}}void PostOrderTraverse(BiTree T,Status(*Visit)(TElemType)){ /* 初始条件: 二叉树T 存在,Visit 是对结点操作的应用函数*//* 操作结果: 后序递归遍历T,对每个结点调用函数Visit 一次且仅一次*/if(T) /* T 不空*/{}}4.在文件BinTreeUse.cpp 中,测试二叉树基本算法的调用/* BinTreeUse.cpp 检验BinTreeAlgo.h 的主程序*/#include"pubuse.h" /* 与实验一的意义相同*/TElemType Nil=0;#include"BinTreeDef.h" /* 二叉树链式存储结构定义*/#include"BinTreeAlgo.h" /* 二叉树基本算法和扩展算法定义*/Status visitT(TElemType e){printf("%d ",e);return OK;}void main(){ int i;BiTree T,p,c;TElemType e1,e2;/* 1---基本实验算法的验证*/InitBiTree(T);printf("构造空二叉树后,树空否?%d(1:是0:否) 树的深度=%d\n", BiTreeEmpty(T), BiTreeDepth(T));e1=Root(T);if(e1!=Nil)printf("二叉树的根为: %d\n",e1);elseprintf("树空,无根\n");printf("请先序输入二叉树(如:1 2 0 0 0 表示1 为根结点,2 为左子树的二叉树)\n");CreateBiTree(T);printf("建立二叉树后,树空否?%d(1:是0:否) 树的深度=%d\n",BiTreeEmpty(T),BiTreeDepth(T));e1=Root(T);printf("二叉树的根为: %d\n",e1);elseprintf("树空,无根\n");printf("中序递归遍历二叉树:\n");InOrderTraverse(T,visitT);printf("后序递归遍历二叉树:\n");PostOrderTraverse(T,visitT);}。

相关文档
最新文档