中南民族大学管理学院学生实验报告

上传人:绿** 文档编号:61837107 上传时间:2018-12-13 格式:DOC 页数:17 大小:129.09KB
返回 下载 相关 举报
中南民族大学管理学院学生实验报告_第1页
第1页 / 共17页
中南民族大学管理学院学生实验报告_第2页
第2页 / 共17页
中南民族大学管理学院学生实验报告_第3页
第3页 / 共17页
中南民族大学管理学院学生实验报告_第4页
第4页 / 共17页
中南民族大学管理学院学生实验报告_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《中南民族大学管理学院学生实验报告》由会员分享,可在线阅读,更多相关《中南民族大学管理学院学生实验报告(17页珍藏版)》请在金锄头文库上搜索。

1、中南民族大学管理学院学生实验报告实验目的(1)学会用先序创建一棵二叉树。(2)学会采用递归算法对二叉树进行先序、中序、后序遍历。(3)学会打印输出二叉树的遍历结果。实验内容【问题描述】建立一棵二叉树,并对其进行遍历(先序、中序、后序),打印输出遍历结果。【基本要求】从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),并采用递归算法对其进行遍历(先序、中序、后序),将遍历结果打印输出。【测试数据】ABCDEGF(其中表示空格字符)则输出结果为 先序:ABCDEGF中序:CBEGDFA后序:CGBFDBA【选作内容】采用非递归算法实现二叉树遍历。实验步骤(一)需求分析1、在

2、这个过程中,接受遍历的二叉树是从键盘接受输入(先序),以二叉链表作为存储结构,建立的二叉树。因此,首先要创建一棵二叉树,而这棵二叉树是先序二叉树。本演示程序中,集合的元素设定为大写字母ABCDEFG,输出的先序,中序,后序遍历分别为ABCDEGF,CBEGDFA,CGBFDBA。二叉树可以表示为:ABDGFEC接受的输入数据在进行递归的先序,中序,后序遍历后,分别将结果打印出来。2、在程序运行的过程中可以看到,以计算机提示用户执行的方式进行下去,即在计算机终端上提示“输入二叉树的先序序列”后,由用户在键盘上输入ABC#DE#G#F#,之后相应的选择遍历及遍历结果显示出来。3、程序执行的命令包括

3、:首先是二叉树的先序序列被创建输入,其次是对输入进去的先序序列有次序的进行先序,中序,后序遍历。最后是打印出二叉树的遍历结果。4、测试数据(1)在键盘上输入的先序序列ABC#DE#G#F#(2)先序遍历结果ABCDEGF(3)中序遍历结果CBEGDFA(4)后序遍历结果CGBFDBA(二)概要设计1、为实现上述程序功能,应以二叉树定义的相关操作和二叉树递归遍历的相关操作为依据。有关以二叉链表作为存储结构,建立二叉树的操作为:typedef BTNode *BTree; /定义二叉树的指针BTree CreatBTree(void)BTree T;char ch;if(ch=getchar()=

4、#)return(NULL); /读入#,返回空指针 elseT=(BTNode *)malloc(sizeof(BTNode); /分配空间,生成结点T-data=ch;T-lchild=CreatBTree(); /构造左子树T-rchild=CreatBTree(); /构造右子树 return(T);2、而有关先序、中序、后序遍历的递归操作为:void Preorder(BTree T) /先序遍历if(T)printf(%c,T-data); /访问结点Preorder(T-lchild); /先序遍历左子树Preorder(T-rchild); /先序遍历右子树void Inord

5、er(BTree T) /中序遍历if(T)Inorder(T-lchild); /中序遍历左子树printf(%c,T-data); /访问结点Inorder(T-rchild); /中序遍历右字树void Postorder(BTree T) /后序遍历if(T)Postorder(T-lchild); /后序遍历左子树Postorder(T-rchild); /后序遍历右子树printf(%c,T-data); /访问结点3、本程序包含的模块(1)结点单元模块(2)构建先序二叉树模块(3)二叉树遍历模块(4)主程序模块各模块之间的调用关系如下:主程序模块结点单元模块构建先序二叉树模块二叉

6、树遍历模块(三)详细设计1、元素类型,结点类型和指针类型typedef struct nodechar data; /二叉树的元素类型struct node *lchild;struct node *rchild;BTNode; /自定义二叉树的结类型typedef BTNode *BTree; /定义二叉树的指针2、定义类型之后,要以二叉链表作为存储结构,建立二叉树(以先序来建立)。BTree CreatBTree(void)BTree T;char ch; /定义输入的数据类型if(ch=getchar()=#) /支持在键盘上输入先序二叉树return(NULL); /读入#,返回空指针

7、对于二叉树的先序输入,在输入中要注意的是对于空指针的把握,由于是先序输入,在输入时要在确定的位置输入“#”号,否则先序二叉树将不完整。 elseT=(BTNode *)malloc(sizeof(BTNode); /分配空间,生成结点T-data=ch;T-lchild=CreatBTree(); /构造左子树T-rchild=CreatBTree(); /构造右子树 return(T);当输入的叶子结点完整之后,要return(T),否则输入将一直持续下去不能跳出来。在程序的设计过程中,在适当的位置插入#对于二叉树的遍历有着十分重要的作用,因此要明白二叉树的先序创建过程如何运行。3、对于二叉

8、树进行先序、中序、后序的遍历。void Preorder(BTree T) /先序遍历if(T)printf(%c,T-data); /访问结点Preorder(T-lchild); /先序遍历左子树Preorder(T-rchild); /先序遍历右子树这个是先序遍历,先序遍历与中序遍历,后序遍历相似,都是以不同顺序访问子树及结点。先序遍历先访问根节点,先序遍历左子树,再先序遍历右子树。而中序遍历是中序遍历左子树,访问根节点,中序遍历右子树。后序遍历是后序遍历左子树,后序遍历右子树,后序遍历根节点。三个遍历虽说顺序不一致,但是在程序的编写上有很多可以相通的地方。以下分别是中序、后序的程序:

9、void Inorder(BTree T) /中序遍历if(T)Inorder(T-lchild); /中序遍历左子树printf(%c,T-data); /访问结点Inorder(T-rchild); /中序遍历右字树void Postorder(BTree T) /后序遍历if(T)Postorder(T-lchild); /后序遍历左子树Postorder(T-rchild); /后序遍历右子树printf(%c,T-data); /访问结点4、主程序模块的链接。在这个模块中,不仅要实现二叉树先序序列从键盘的输入,还要实现选择三个遍历的输出。主函数的作用旨在使每个程序模块能够链接在一起,

10、调用各个函数以实现最终的目的。void main()BTree root; /数的根结点int i; /可供选择的整型变量i printf(n);printf(请输入二叉树的先序序列,用#代表虚结点:);root=CreatBTree(); /返回根结点do /循环语句printf(*SELECT*n);printf(t1:先序遍历n);printf(t2:中序遍历n);printf(t3:后序遍历n);printf(t0:Exitn);printf(t*n);scanf(%d,&i);/输入菜单序号switch(i)case 1:printf(先序遍历结果为:);Preorder(root)

11、;break;case 2:printf(中序遍历结果为:);Inorder(root);break;case 3:printf(后序遍历结果为:);Postorder(root);break;在这三个选择中,充分调用了先序、中序、后序遍历函数,选择1、2、3数字实现对三个遍历的输出打印。default:exit(1);printf(n);while(i!=0);5、函数的调用关系图反映了演示程序的层次结构:mainCreatBTreeInorderPreorderPostorder(四)调试分析1、实验涉及的部分包括用二叉链表创建先序二叉树,对二叉树进行三种遍历,最后是对三种遍历结果进行打印

12、。在做这个实验的过程中,我们首先最先碰到的问题是用二叉链表存储先序二叉树,由于对二叉树存储的不深入了解,我们在输入数据时,只能对其无限输入,并不能及时的终止,导致的结果是程序停止不了,运行不下去。不能返回的问题困扰了我们很久,在这个过程中,我们还尝试了一些用栈来对其进行存储,通过一遍遍的摸索,最终找到了正确的方法。在这个过程中,我们也对二叉树的存储有了更为深刻的了解,相信这在我们以后的学习中也有很大的帮助。2、在实验过程中,我们还有尝试了非递归的算法对于二叉树的遍历,递归算法和非递归算法各有千秋,产用递归算法更为简单明了。3、根节点的运用没有得到合理的开发,在主程序的链接中,创建二叉树,返回根节点。接着是一个do循环对于选择三种遍历结果的打印输出和退出操作,在开始的程序设计阶段没有发挥作用,前期使用的是while和swith语句,没有返回根结点,造成算法的运行不能有序进行下去。4、刚开始是忽略了一些细节问题,对于元素类型,结点类型的定义没有认真检查,程序前期运行

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号