- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章 查找
2. 平方取中法 平方取中法通过求关键字的平方值扩大差别,然后, 再取中间的几位或其组合作为散列地址。 因为一个乘积的中间几位数和乘数的每一位都相关, 故由此产生的散列地址也较为均匀,所取位数由散列表 的表长决定。 通常,要预先估计关键字的数字分布并不容易,要 找数字均匀分布的位数更难。此时可采用平方取中法。 /*函数返回插入*s后二叉排序树的根指针*/ bstnode *INSERTBST(t,s) bstnode *s, *t; { bstnode *f, *p; p=t; while (p!=NULL) { f=p; /*查找过程中,f指向*p的双亲*/ /*树中已有结点*s,无须插入*/ if (s-key==p-key) return t; 1. 二叉排序树的插入和生成 if (s-keyp-key) p=p-lchild; /*在左子树中查找插入位置*/ else p=p-rchild; /*在右子树中查找插入位置*/ } /*while*/ if (t==NULL) return s; /*原树为空,返回s作为根指针*/ if (s-key f-key) f-rchild=s; /*将*s插入为*f的左孩子*/ else f-rchild=s; /*将*s插入为*f的右孩子*/ return t; } /*INSERTBST*/ 1. 二叉排序树的插入和生成 58 将58插入到二叉排序树中 1. 二叉排序树的插入和生成 45 12 3 53 37 24 100 61 90 78 58 二叉排序树的生成,是从空的二叉排序树开始,每 输入一个结点数据,就建立一个新结点插入到当前已生 成的二叉排序树中。二叉排序树的生成算法如下: bstnode *CREATBST( ) { bstnode *t, *s; keytype key, endflag=0; datatype data; t=NULL; /*设置二叉排序树的初态为空树*/ scanf(“%d”,key); /*读入一个结点的关键字*/ 1. 二叉排序树的插入和生成 while (key!=endflag) /*输入未到结束标志时,循环*/ { s=malloc(sizeof(bstnode)); /*申请新结点*/ s-lchild=s-rchild=NULL; /*赋初值*/ s-key=key; scanf(“%d”,data); /*读入结点的其它数据项*/ s-other=data; t=INSERTBST(t,s); /*将新结点*s插入树t中*/ scanf(“%d”,key); /*读入下一个结点的关键字*/ } return t; } /*CREATBST*/ 1. 二叉排序树的插入和生成 45 24 53 12 28 90 45 24 53 12 28 90 1. 二叉排序树的插入和生成 2. 二叉排序树的删除 从二叉排序树中删除一个结点,不能把以该结点为 根的子树都删去,只能删掉该结点,并且还要保证删除 后所得的二叉树仍然满足二叉排序树的性质。也就是说, 在二叉排序树中删去一个结点相当于删去有序序列中的 一个结点。 删除操作必须首先进行查找,以确定被删结点是否 在二叉排序树中。若不在,则不做任何事情;否则,设 找到的被删结点是*p,f指向*p的双亲,删除操作可按 *p是否有左子树来分别处理 (1)若被删结点 *p 没有左子树,则删除*p时只 要将 *p的右子树按照二叉排序树的特性链接到合适的 位置上即可。若*p是根结点,则只要将 *p的右子树的 根作为新的根结点;若 *p不是根,则删去*p时必须将 它与其双亲 *f之间的链接断开,所以,恰好可利用此 链将待链接的*p的右子树链到*f的左(或右)链域上。 2. 二叉排序树的删除 2. 二叉排序树的删除 若*p是*f的左孩子,则将*p的右子树链接到*f的左链 上,否则将*p的右子树链到*f的右链上。显然,若*p的右 子树亦为空,则*p是树叶,此时,p-rchild=NULL,相当 于将空树链接到*f的左(或右)链域中。 pk f p pk f p (2)若被删结点 *p 有左子树;则*p也可能有右子 树,因此,删去 *p时应考虑将*p的左、右子树链接到合 适的位置,并保持二叉排序树的特性。 2. 二
您可能关注的文档
最近下载
- 部编版四年级语文上册期末复习1-8单元看拼音写词语(带答案).docx VIP
- T∕ZZB 1243-2019 66kV~220kV交流电缆用交联聚乙烯绝缘料.docx VIP
- 文化遗产数字化采集与数据库建设.docx VIP
- 部编版小学语文5上1-8单元(全册)看拼音写词语(巩固复习).pdf VIP
- 隔音声屏障工程设计方案(3篇).docx VIP
- 07MR403 城市道路-护坡.pdf VIP
- BCAT_0001—2018建设工程人工材料设备机械数据分类标准及编码规则 2018 207页.pdf VIP
- 食品安全事故应急处置培训.docx VIP
- (最新2025)三方抵账协议范本工程款抵房三方协议范本6篇.docx
- 老年患者营养评估与干预.pptx VIP
文档评论(0)