- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
江西农业大学
软件工程学院
数据结构 课程设计报告
设计题目 二叉树的遍历及应用
学生专业班级 软件091班
学生姓名(学号) 何芳清
指导老师 凌琳
完成时间 2010年7月9日
实习(设计)地点 计信楼机房
2010年 7月 9 日
一 课程设计目的和任务:
了解树的逻辑和存储特点,掌握二叉树的建立,以及前中后序遍历的理论思想和运算方法。
二 实验内容:
建立一棵二叉树,添加树中结点的元素,对该二叉树进行前、中、后序遍历,并打印遍历结果
三 实验原理:
二叉树(Binary Tree)是个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点。
二叉树是有序的,即若将其左、右子树颠倒,就成为另一棵不同的二叉树。即使树中结点只有一棵子树,也要区分它是左子树还是右子树。
1A
1
A
32C B
3
2
C
B
7654FGED
7
6
5
4
F
G
E
D
JIH
J
I
H
10 89
10
8
9
二叉树
二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示着元素的逻辑关系。通常有下面两种形式。
二叉链表存储
链表中每个结点由三个域组成,除了数据域外,还有两个指针域,分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。结点的存储的结构为:
lchild rchild data
lchild
rchild
data
结点示意图
其中,data域存放某结点的数据信息;lchild与rchild分别存放指向左孩子和右孩子的指针,当左孩子或右孩子不存在时,相应指针域值为空。
二叉树的建立:
1 建立根结点。
2 若左子树不空则建左子树。
3 若右子树不空则建右子树。
二叉树的前序遍历
1 访问根结点;
2 先序遍历根结点的左子树;
3 先序遍历根结点的右子树。
二叉树的中序遍历
1 中序遍历根结点的左子树;
2 访问根结点;
3 中序遍历根结点的右子树。
二叉树的后序遍历
1后序遍历根结点的左子树;
2后序遍历根结点的右子树。
3访问根结点;
四 实验步骤
1 进入Turbo C2.0,新建一个文件。
2 输入程序,程序要求使用子函数进行组织。
3 将源程序保存到指定文件夹“D:\学生姓名”。
4 按F9调试,纠正语法错误。
5按Ctrl+F9运行,调试逻辑错误。
6 按Alt+F5查看结果。
五、实验中应注意的问题与思考题:
1 如果需要对树中的数据进行查询修改,应该如何实现?
先找到需要修改的数据的位置,再让对其赋值。
2对各个功能模块采用独立编制子函数,增强程序的可执行性、可移植性和可读性。增加情报信息量,对实际应用中可能发生的情况考虑周全,对非法情形要提出适当的处理方案。
3 深入了解树的逻辑结构,重点掌握递归方法的原理和实现,在确定递归终点条件的时候应特别小心,避免产生死循环。对树的遍历或处理应该采用递归的方法,尽量不使用非递归算法。
六、源代码
#include stdio.h
#include stdlib.h
struct btnode
{ int d;
struct btnode *lchild;
struct btnode *rchild;
};
struct btnode *creatbt(bt,k)
/*二叉树的生成*/
struct btnode *bt; int k;
{ int b; struct btnode *p,*t;
printf(请输入b: );
scanf(%d,b);
if(b!=0)
{ p=(struct btnode *)malloc(sizeof(struct btnode));
p-d=b;p-lchild=NULL;p-rchild=NULL;
if(k==0) t=p;
if(k==1) bt-lchild=p;
if(k==2) b
原创力文档


文档评论(0)