查找技术综合应用.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文档。上传文档
查看更多
查找技术综合应用.doc

查找技术综合应用 1、源程序代码 #include stdio.h #include stdlib.h #define max 25 typedef struct bst //定义二叉树 { int key; //int date; struct bst *lchild,*rchild;//左右孩子 }bst; ////////////////////////////////二叉树的插入函数 int Insertbst(bst * p,int k)//在二叉树中插入一个数 { if(p==NULL)//如果二叉树为空直接插入 { p=(bst*)malloc(sizeof(bst)); p-key =k; p-lchild =p-rchild =NULL;//左右孩子的初值为NULL return 1; } else if(k==p-key ) //如果插入的是已经存在,就不在插入 return 0; else if(kp-key )//如果小于关键字,递归调用左子树 { return Insertbst(p-lchild ,k); } else //如果大于关键字,递归调用右子树 return Insertbst(p-rchild ,k); } bst* Creatbst(int a[],int n) //二叉排序树的创建 { bst *bt=NULL; //初始化树为空 int i=0; while(in) { Insertbst(bt,a[i]); //将关键字插入到树中 i++; } return bt; //返回建立的二叉树的更指针 } /////////////////////////// void Inorder(bst*b)//中序遍历二叉树的递归算法 { if(b!=NULL) { Inorder(b-lchild ); printf(%d\t,b-key ); Inorder(b-rchild ); } } /////////////////////查找函数 int Searchbst(bst *bt,int k)//二叉树的查找 { if(bt==NULL) //如果为空返回0 return 0; if(bt-key==k) return k;//如果有则返回k值 if(kbt-key) return Searchbst(bt-lchild,k);//递归调用左子树 else return Searchbst(bt-rchild,k);//递归调用右子树 } /////////////////删除函数 void Delatel(bst *p,bst*r) //当结点有左右子树的删除过程 { bst*q; if(r-rchild !=NULL) Delatel(p,r-rchild );//递归找到最右下结点 else { p-key =r-key ;//将r的关键字赋值给P q=r; r=r-lchild ;//直接将其左子树的根结点放在被删除的位置上 free(q); //释放原r 的空间 } } void Delate(bst *p)//从二叉树中删除*P结点 { bst *q; if(p-rchild ==NULL) //结点没有右子树的情况 { q=p; p=p-lchild ;//直接将其右子树的跟结点放在删除的结点位置上 free(q); } else if(p-lchild ==NULL)//结点没有左子树的情况 { q=p; p=p-rchild ;//直接将其左子树的跟结点放在删除的结点位置上 free(q); } else Delatel(p,p-lchild );//结点既没有左子树也没有右子树 } int Delatebst(bst *bt,int k) //删除函数 { if(bt==NULL) return 0;//空二叉树删除失败 else { if(kbt-key ) return Delatebst(bt-lchild ,k); else if(kbt-key ) return Delatebst(bt-rchild ,k); else { Delate(bt); return 1; } } } ///////////////////////////////////////// void main() { bst *p; int a[max],i,n,m; printf(输入要排序的个数

文档评论(0)

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

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

版权声明书
用户编号:5212202040000002

1亿VIP精品文档

相关文档