- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
叉排序树中删除个
二叉排序树上的删除,相当于删去 有序序列上的一个记录,应保证删 除结点后,二叉排序树的特性不变。 删除结点可有三种情况: 1.若被删除结点*p为叶子结点,即其pL和pR均为空树。由于叶子结点的存在若不破坏整株树的结构,则只需修改其父结点的指针即可。 2.若*p结点只有左子树pL或只有右子树pR,此时只要令pL或pR直接成为其父结点*f 的左子树即可。可见,也不破坏二叉排序树的特性。 3.若*p结点的左、右子树均不空,不能简单处理,可有两种情况。例: 二叉排序树中删除一个 结点的算法 DeleteBST(T , key) { if(!T) return False; else { if(EQ(key, T-data.key)) return Delete(T); if(LT(key,T-data.key)) return DeleteBST(T-lchild,key); else return DeleteBST(T-rchild,key);} }//DeleteBST 上述三种情况的删除算法 Delete(p)/*p被删除点*/ { if(!p-rchild) /*右子树空接其左子树*/ {q=p;p=p-lchild;free(q);} else if(!p-lchild)/*只接其右子树*/ { q=p;p=p-rchild;free(q);} else { q=p; s=p-lchild; while(s-rchild) { q=s; s=p-lchild;} /*转左,然后向右到尽头*/ p-data= s-data;/*s指向删除结点的前驱*/ if(q!=p) q-rchild= s-lchild;/*接*p的右子树*/ else q-lchild=s-lchild;/*接*p的左子树*/ delete s; } return TRUE; } //Delete 三.二叉排序树的查找分类 从平均查找长度分析: 设有6个记录,其关键字序列为(45,24,53,12,37,93)或由另一种序列构成(12,24,37,45,53,93)其对应的二叉排序树: (a)树的深度为3 (b)树的深度为6 若每个记录的查找概率相等,为 , 则树的平均查找长度为: AsL(a)= (1+2+2+3+3+3)= AsL(b)= (1+2+3+4+5+6)= 查找关键字与给定值的结点的过程,是从 根结点到该结点路径的过程,和给定值比 较的关键字个数等于路径长度加1(或结点 所在层次数)。 可见,含有n个结点的二叉排序树 的平均查找时间和树的形态有关。 若构造二叉排序树时,按关键字有序构造, 树的深度为n。其平均查找长度为 ,这 是最差的情况。 若二叉排序树的形态和折半查找的判定 树相同。其平均查找长度Log2n成正比。 第十章 内部排序 10.1 术语和约定 排序(ordering)也叫分类(sorting),是 将一组数据按照规定顺序进行排列,其目 的是为了方便查询和处理。 按分类时分类对象存放的设备,分为内 部排序和外部排序。 排序过程中数据对象全部在内存中进行, 叫内部排序。 排序过程中数据对象并非完全在 内存中进行叫外部排序。 分类的稳定性: 对于给定数组A,经排序处理后,满足关 系: A[1].key A[2].key … A[n].key 若在排序前存在关系: A[i].key A[j].key ( 1 ij n ) 经排序后,A[i]和A[j]分别被移至A[i1]和A[j1],并且i1和j1满足关系1 ij n 我们称这种排序是稳定的,否则称 其为不稳定的。 影响排序性能的因素: 比较关键字的次数—当关键字是字符串时,只主要因素。 交换记录位置和移动记录的次数—当记录很大时,是主要因素。 上述两条是排序过程中进行的基本操作。 待排序记录序列可有三种存贮方式: 待排序的一组记录存放在地址连 续的一组存贮单元中。 存放在静态链表中。 地址排序,即记录存放在一组地址连续的单元中。另设一个指示各记录存贮位置的地址向量。排序过程中不移动记录本身,而移动地址向量中记录的地址。 待排记录的数据类型: #define maxsize 20 typedef int keytype; typedef struct {
文档评论(0)