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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构二叉树的算法.docx

1、数据结构二叉树的算法数据结构课程设计报告 二叉树算法 计算机科学与技术学院 计算机网络1102班 学号:1108040212张花二叉树算法一 课程设计目的与要求:1. 掌握二叉树的基本概念和性质2. 掌握创建和构造二叉树的算法3. 掌握二叉树存储基本的三种递归算法4. 掌握计算二叉树的结点实验要求:(1)理解二叉树的初始化 二叉树空的判断;(2)理解二叉树的遍历算法,掌握其基本应用。二实验原理及内容实验题目:1. 创建二叉树的链表结构;2. 实现二叉树链表的初始化算法,二叉树空的判断算法;3. 实现二叉树的先序遍历算法,中序遍历算法和后序遍历算法;4. 利用某遍历算法实现计算二叉树中的叶子结点

2、;5. 求二叉树中的结点数;6. 设计一个算法,求二叉树指定的结点x的层数,求先序遍历序列中第k个结点的左孩子;三课程设计内容解答: 1.二叉树的二叉链式存储结构的结点结构体定义 typedef struct nodeTElemType data; struct node *left; struct node *right; struct node *parent;BiTNode,*BiTree;2.写二叉树的先序,中序,后序遍历算法先序遍历算法void Prorder1(BiTNode *bt,void(*visit)(TElemType)if(bt!=NULL) visit(bt-data

3、); Prorder1(bt-left,visit); Prorder1(bt-right,visit); 中序遍历算法void Prorder2(BiTNode *bt,void(*visit)(TElemType)/BiTNode *p,*stackMAS; int top; top=0; p=bt; while(top!=0|p!=NULL) while(p!=NULL) stacktop=p; top+; p=p-left; if(top!=0) p=stacktop-1; top-; visit(p-data); p=p-right; 后序遍历算法void Prorder3(BiTN

4、ode *bt,void(*visit)(TElemType)/BiTNode *p,*stackMAS; int top; top=0; stacktop=bt; top+; while(top0) p=stacktop-1; top-; while(p!=NULL) visit(p-data); stacktop=p-right; top+; p=p-left; 等一系列的代码说明就不再报告中啰说还占用报告篇幅4.程序结果截图五.课程设计小结 1.指出二叉树的顺序存储和链式存储的优缺点:(顺序存储可能会浪费空间,但是读取某个指定节点的时候效率比较高) 2.将你测试使用的二叉树,如果使用顺序

5、存储,请画出存储结构3.课程设计的时间好短啊,好难的课程设计啊!附件:#include#include#define MAX 50#define MAS 20#define CHAR 1#if CHAR typedef char TElemType; TElemType Nil= ; #define form %c#else typedef int TElemType; TElemType Nil=0; #define form %d#endiftypedef struct nodeTElemType data; struct node *left; struct node *right; s

6、truct node *parent;BiTNode,*BiTree;BiTNode *InitBiTree(BiTNode *bt) bt=NULL; return bt;BiTNode *CreateBiTree(BiTNode *bt)TElemType ch; scanf(form,&ch); if(ch=Nil) bt=NULL; else bt=(BiTNode *)malloc(sizeof(BiTNode); if(!bt) exit(0); bt-data=ch; bt-parent=NULL; bt-left=CreateBiTree(bt-left); if(bt-lef

7、t) bt-left-parent=bt; bt-right=CreateBiTree(bt-right); if(bt-right) bt-right-parent=bt; return bt;void PrintTree(BiTNode *bt,int i) if(bt!=NULL) PrintTree(bt-right,i+5); #if CHAR if(bt-data!=Nil) printf(%*cn,i,bt-data); #else if(bt-data!=Nil) printf(%*dn,i,bt-data); #endif PrintTree(bt-left,i+5); i=

8、i-5; void Prorder1(BiTNode *bt,void(*visit)(TElemType)/*先序遍历*/if(bt!=NULL) visit(bt-data); Prorder1(bt-left,visit); Prorder1(bt-right,visit); void Prorder2(BiTNode *bt,void(*visit)(TElemType)/*中序遍历*/BiTNode *p,*stackMAS; int top; top=0; p=bt; while(top!=0|p!=NULL) while(p!=NULL) stacktop=p; top+; p=

9、p-left; if(top!=0) p=stacktop-1; top-; visit(p-data); p=p-right; void Prorder3(BiTNode *bt,void(*visit)(TElemType)/*后序遍历*/BiTNode *p,*stackMAS; int top; top=0; stacktop=bt; top+; while(top0) p=stacktop-1; top-; while(p!=NULL) visit(p-data); stacktop=p-right; top+; p=p-left; void visit(TElemType e)pr

10、intf(form ,e);int SumLefts(BiTNode *bt,int sum) if (bt!=NULL) if (bt-left=NULL & bt-right=NULL) printf(%4c,bt-data); sum+; sum=SumLefts(bt-left,sum); sum=SumLefts(bt-right,sum); return(sum);int SumTree(BiTNode *bt)static int sum=0; if(bt!=NULL) printf(%4c,bt-data); sum+; sum=SumTree(bt-left); sum=Su

11、mTree(bt-right); return(sum);BiTNode *Findchar(BiTNode *bt,char ch) /*二叉树查找结点*/BiTNode *p; /*利用函数名返回结果*/ if(bt!=NULL) if(bt-data=ch) p=bt; p=Findchar(bt-left,ch); p=Findchar(bt-right,ch); if(p!=NULL) return(p); else return(NULL);void main() int j,i,a,sum=0; BiTree bt; bt=InitBiTree(bt); #if CHAR pri

12、ntf(请先序输入二叉树(如:ab三个空格表示a为根结点,b为左子树的二叉树)n); #else printf(请先序输入二叉树(如:1 2 0 0 0表示1为根结点,2为左子树的二叉树)n); #endif bt=CreateBiTree(bt); printf(输入建立的二叉树!n); PrintTree(bt,5); do printf(-); printf(n 主菜单); printf(n 1 二叉树先序遍历); printf(n 2 二叉树后序遍历); printf(n 3 二叉树中序遍历); printf(n 4 二叉树叶子结点数); printf(n 5 二叉树结点数); pri

13、ntf(n 6 二叉树查找x结点); printf(n 0 退出); printf(n-); printf(n); printf(输入你要选择的数据:); scanf(%d,&i); switch(i) case 1: printf(先序遍历结果为:); Prorder1(bt,visit); break; case 2: printf(后序遍历结果为:); Prorder2(bt,visit); break; case 3: printf(中序遍历结果为:); Prorder3(bt,visit); break; case 4: j=SumLefts(bt,sum); printf(树的叶子结点数为%d:,j); break; case 5: j=SumTree(bt); printf(树的结点数为%d:,j); break; case 6: printf(输入要查找的结点字符x:); scanf(%c,&a); scanf(%*c); / j=Findchar(bt,a); printf(要查找的结点的指针为%d:,j); break; case 0: exit(0); printf(n); / getch(); while(i0|i8);

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

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