ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:63.83KB ,
资源ID:12009751      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12009751.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(浙大城院数据结构report10.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

浙大城院数据结构report10.docx

1、浙大城院数据结构report10浙江大学城市学院实验报告课程名称 数据结构基础 实验项目名称 实验十 二叉树的基本操作 学生姓名 专业班级 学号 实验成绩 指导老师(签名 ) 日期 三. 函数的功能说明及算法思路树的基本函数void InitBTree( BTreeNode *&BT ); /初始化二叉树BT int EmptyBTree( BTreeNode *BT); /检查二叉树BT是否为空,空返回1,否则返回0 int DepthBTree( BTreeNode *BT);/求二叉树BT的深度并返回该值 int FindBTree( BTreeNode *BT, ElemType x)

2、; /查找二叉树BT中值为x的结点,若查找成功返回1,否则返回0 void PreOrder( BTreeNode *BT);/先序遍历二叉树BTvoid InOrder( BTreeNode *BT);/中序遍历二叉树BTvoid PostOrder( BTreeNode *BT); /后序遍历二叉树BT void PrintBTree( BTreeNode *BT );/输出二叉树BT void ClearBTree( BTreeNode *&BT ); /清除二叉树BTvoid CreateBTree( BTreeNode *&BT, char *a)/根据字符串a所给出的广义表表示的二

3、叉树建立二叉链表存储结构 树的附加函数void LevelOrder( BTreeNode *BT ) /按层次遍历二叉树BT 定义并且初始化队列q if(树不空) 根结点入队; while(队列不空) BT =出队的元素 访问该结点 if (BT的左孩子不空) BT的左孩纸入队列; if (BT的右孩子不空) BT的右孩纸入队列; int Get_Sub_Depth( BTreeNode *T , ElemType x)/求二叉树中以元素值为x的结点为根的子树的深度 if(BT不是空) if(BT-data=x) 返回BT的深度; Else返回 Get_Sub_Depth(BT的左孩纸,x)

4、和Get_Sub_Depth(BT-的右孩纸,x)中的较大值 Else返回0;顺序栈的操作 (void CreateBTree( BTreeNode *&BT, char *a)/根据字符串a所给出的广义表表示的二叉树建立二叉链表存储结构 中要用到顺序栈的结构) void InitStack (Stack &S) /构造一个空栈 S int EmptyStack (Stack S) /若栈S为空栈返回1,否则返回0void Push(Stack &S, BTreeNode * item) /元素 item进栈 BTreeNode * Pop(Stack &S) /栈S的栈顶元素出栈并返回 BT

5、reeNode * Peek(Stack S) /取栈S的当前栈顶元素并返回 循环队列的操作 (void LevelOrder( BTreeNode *BT )按层次遍历二叉树B函数中要用到队列存储树中元素 )void InitQueue (Queue &Q) /初始化循环队列Q int EmptyQueue (Queue Q) /判断队列是否为空,空返回1,否则返回0 void EnQueue (Queue &Q , BTreeNode * item ) /进队列 BTreeNode * OutQueue(Queue &Q)/出队列 四. 实验结果与分析(包括运行结果截图、结果分析等)先定义

6、了一个二叉树,因为是空,所以输出”改二叉树为空”的信息之后输入广义表再定义为二叉树,再对二叉树进行一系列操作五. 心得体会(记录实验感受、上机过程中遇到的困难及解决办法、遗留的问题、意见和建议等。)出错点:在binary_tree.h头文件中,对顺序栈以及队列的定义在树的定义之后,导致在编译中,先编译树的函数,调用顺序栈以及队列出错改正:将顺序栈以及队列的函数定义在树函数之前【附录-源程序】binary_tree.h/*顺序栈的操作*/ struct Stack BTreeNode *stack; / 存栈元素 int top; / 栈顶指示器 int MaxSize; / 栈的最大长度 ;

7、void InitStack (Stack &S) /构造一个空栈 S S.MaxSize=10; S.stack=(BTreeNode*)malloc(S.MaxSize *sizeof(BTreeNode *); if(!S.stack) cout分配空间失败endl; exit(1); S.top=-1; int EmptyStack (Stack S) /若栈S为空栈返回1,否则返回0 return S.top=-1; void Push(Stack &S, BTreeNode * item) /元素 item进栈 if(S.top=S.MaxSize-1) S.stack=(BTre

8、eNode*)realloc(S.stack,S.MaxSize*sizeof(BTreeNode *)*2); S.MaxSize*=2; S.top+; S.stackS.top=item; BTreeNode * Pop(Stack &S) /栈S的栈顶元素出栈并返回 BTreeNode * temp; if(S.top=-1) cout顺序链为空endl; exit(1); S.top-; temp=S.stackS.top+1; return temp; BTreeNode * Peek(Stack S) /取栈S的当前栈顶元素并返回 return S.stackS.top; /*循

9、环队列的操作*/ struct Queue BTreeNode *queue; int MaxSize; /队列最大存储数 int front; /头指针,若队列不空,指向队列头元素的前一个位置 int rear; /尾指针,若队列不空,指向队列尾元素 ; void InitQueue (Queue &Q) /初始化循环队列Q Q.MaxSize=20; Q.queue =(BTreeNode *)malloc(Q.MaxSize*sizeof(BTreeNode *); Q.rear=Q.front =0; int EmptyQueue (Queue Q) /判断队列是否为空,空返回1,否则

10、返回0 return Q.rear=Q.front; void EnQueue (Queue &Q , BTreeNode * item ) /进队列 if(Q.rear+1)%Q.MaxSize=Q.front )/空间不足,扩大2倍 int k=sizeof(BTreeNode *); Q.queue=(BTreeNode *)realloc(Q.queue,2*Q.MaxSize*k); if(Q.rear!=Q.MaxSize-1) /移动队列内容,必须要做 for(int i=0;idata = ai; p-lchild = p-rchild = NULL; if (BT= NULL

11、) BT = p; else t = Peek(s); if (k=1) t-lchild = p; else t-rchild = p; i+; int EmptyBTree( BTreeNode *BT) /检查二叉树BT是否为空,空返回1,否则返回0 return BT=NULL; int DepthBTree( BTreeNode *BT)/求二叉树BT的深度并返回该值 if(BT=NULL) /空树深度为0 return 0; else int dep1=DepthBTree(BT-lchild); /先求根结点左子树的深度 int dep2=DepthBTree(BT-rchild

12、); /再求根结点右子树的深度 if(dep1dep2) /返回最大值,并加上根结点这一层 return dep1+1; else return dep2+1; int FindBTree( BTreeNode *BT, ElemType x) /查找二叉树BT中值为x的结点,若查找成功返回1,否则返回0 if(BT=NULL) return 0; else if(BT-data=x) return 1; else if(FindBTree(BT-lchild,x) return 1; if(FindBTree(BT-rchild,x) return 1; return 0; void Pre

13、Order( BTreeNode *BT) /先序遍历二叉树BT if(BT) coutdatalchild); /先序遍历左子树 PreOrder(BT-rchild); /先序遍历右子树 void InOrder( BTreeNode *BT) /中序遍历二叉树BT if(BT) InOrder(BT-lchild); /中序遍历左子树 coutdatarchild); /中序遍历右子树 void PostOrder( BTreeNode *BT) /后序遍历二叉树BT if(BT) PostOrder(BT-lchild); /后序遍历左子树 PostOrder(BT-rchild);

14、/后序遍历右子树 coutdata ; /访问根结点 void PrintBTree( BTreeNode *BT ) /输出二叉树BT if (BT) /树非空 coutdata; /输出根结点 if (BT-lchild != NULL | BT-rchild != NULL)/若非叶子结点,则递归调用输出左右子树 coutlchild ); if (BT-rchild != NULL) coutrchild ); coutlchild); /先递归删除左子树 ClearBTree(BT-rchild);/再递归删除右子树 free(BT); /最后释放根结点 BT=NULL;/根指针为空

15、 /*附加的操作*/按层次遍历二叉树BT void LevelOrder( BTreeNode *BT ) /按层次遍历: 利用队列, 每次访问队头结点,一旦访问某结点,它的左右孩子入队列,该结点出队列 Queue q; / 定义一个队列 InitQueue (q);/ 初始化队列 if(BT)/ 树不空 EnQueue (q,BT);/ 根结点入队 while(!EmptyQueue (q)/ 队列不空 BT = OutQueue(q); / 出队 coutdatalchild != NULL) EnQueue( q, BT-lchild ); if (BT-rchild != NULL)

16、EnQueue( q, BT-rchild ); int Depthx(BTreeNode *BT,ElemType x) int m,n; if(BT) if(BT-data=x) return DepthBTree(BT); else m=Depthx(BT-lchild,x); n=Depthx(BT-rchild,x); return mn?m:n; else return 0; Test4_1.cpp#include #include #include typedef char ElemType; struct BTreeNode ElemType data; BTreeNode *

17、lchild; BTreeNode *rchild; ; #includebinary_tree.h void main() BTreeNode *T1,*T2,*T3; char ch80,x; /x用于存放查找的数据 InitBTree(T1); /初始化二叉树 cout基本功能测试endl; EmptyBTree(T1)?cout该二叉树为空endl:cout该二叉树非空endl;/判断二叉树t1是否为空 printf(请输入广义表:); gets(ch); /将广义表保存在ch字符串中 CreateBTree(T1,ch); /建立二叉树 EmptyBTree(T1)?cout该二叉树

18、为空endl:cout该二叉树非空endl; cout该树的深度为DepthBTree(T1)x; if(FindBTree(T1,x) cout该元素在二叉树中endl; cout且二叉树中以该元素结点为根的子树的深度为Get_Sub_Depth(T1,x)endl; else cout该元素不在二叉树中endl; cout先序序列:;/先序序列 PreOrder(T1); coutendl; cout中序序列:;/中序序列 InOrder(T1); coutendl; cout后序序列:;/后序序列 PostOrder(T1); coutendl; cout层序序列:;/层序序列 LevelOrder(T1); coutendl; cout输出二叉树:;/输出二叉树 PrintBTree(T1); coutendl; coutendl; ClearBTree(*&T1);/清除二叉树

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1