数据结构-二叉排序树.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课程设计 系 别 电子信息系 专 业 计算机科学与技术 班级学号 姓 名 指导教师 成 绩 年 月 日 一、需求分析 程序设计要求对一学生成绩管理程序构造二叉排序树,并在二叉排序树中实现多种方式的查找。基本任务:(1)以回车(\n)为输入结束标志,输入数列L,生成一棵二叉排序树T;(2)对二叉排序树T作中序遍历,输出结果;(3)输入元素x,查找二叉排序树T,若存在含x的结点,则删除该结点,并作中序遍历(执行操作2);否则输出信息“无x”; 若要完成题目的要求,需要解决以下几个问题: 1、选择一种数据结构存储二叉树的信息 2、建立一个新的二叉排序树 在二叉排序树中实现插入、删除、查找相关节点的操作 二、概要设计 1、数据结构的选择: 题目要求选择合适的存储结构构造二叉排序树,我选择链式结构存储。用链表的方式构造节点,存储二叉排序树中的节点。节点类型和指针类型如下: typedef struct node {int key; int other ; struct node *lchild,*rchild; }Bstnode; 2、概要设计: 为了完成所需的功能,需要的函数及其功能如下: main():主函数模块 Bsearch():查找相应的节点 InsertBST ():插入一个新节点 CreateBST ():创建一棵二叉排序树 Inorder ():对二叉排序树进行中序遍历 menu():主函数显示菜单模块 DeleteBST ():删除节点 主函数流程图: 开始 开始 结束 调用menu函数 输入二叉排序树中的元素 输入k=1 k=2 k=4 显示菜单 调用子函数DeleteBST () Inorder () 调用子函数Bsearch() 调用子函数InsertBST () Inorder () z N k=3 图 主函数流程图 子函数流程图: A.插入子函数InsertBST ()的流程图: 开始 开始 x=p-key N Y p=p-lchild p=p-rchild xp-key Y N 图 子函数InsertBST ()的流程图 B.子函数Bsearch(p)的流程图 开始 开始 结束 输入需要查找的值 调用查找函数并返回 flag=0 找不到值为%d的节点 已找到该节点 Y N 图 子函数Bsearch(p)的流程图 三、详细设计 二叉排序树的基本操作 二叉排序树的查找算法 若二叉排序树为空,则查找失败。 否则,将根结点的关键字与待查关键字进行比较,若相等,则查找成功;若根节点关键字大于待查值,则进入左子树重复次步骤,否则,进入右子树进行此步骤;若在查找过程中遇到二叉排序树的叶子节点时,还没有找到待查节点,则查找不成功。 算法如下: Bstnode *Bsearch(Bstnode *t,int x)//查找 {Bstnode *p; int flag=0;p=t; while(p!=NULL) { if(p-key==x) { printf(已找到该节点!);flag=1;return(p);break;} if (xp-key) p=p-lchild; else p=p-rchild; } if(flag==0) {printf(找不到值为%d的节点!,x); return NULL; } } 二叉排序树的节点插入算法 在二叉排序树中插入一个新节点,首先要查找该节点在二叉排序树中是否已经存在。若二叉排序树中不存在关键字等于x的节点,则插入。 将一个关键字值为x的节点s插入到二叉排序树中,可以用下面的方法: 若二叉排序树为空,则关键字为x的节点s成为二叉排序树的根‘ 若二叉排序树非空,则将x与二叉排序树根进行比较,如果x的值等于根节点关键值,则停止插入;如果x的根节点值小于根节点关键值,则将x插入左子树;如果x的值大于根节点关键字的值,则将x插入右子树。在左右两个子树的插入方法与整个二叉排序树相同。 算法如下: Bstnode *InsertBST(Bstnode *t,int x)//插入 {Bstnode *s,*p,*f;p=t; while (p!=NULL){ f=p; //查找过程中,f指向*p的父节点 if(x==p-key) return t; //二叉排序树中已有关键字为x的元素,无序插入 if(xp-key) p=p-lchild; else p=p-rchild; } s=(Bstnode

文档评论(0)

zhuliyan1314 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档