- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
数据结构*StatusInsertBST(BiTreeT,ElemTypee){
if(!SearchBST(T,e.key,NULL,p){//查找不成功
s=(BiTree)malloc(sizeof(BiTNode));
if(!s)exit(1);//存储分配失败
s-data=e;s-lchild=s-rchild=NULL;
if(!p)T=s;//插入*s为新的根结点
elseif(e.keyp-data.key)
p-lchild=s;//插入*s为*p的左孩子
elsep-rchild=s;//插入*s为*p的右孩子
returnTRUE;
}//if
elsereturnFALSE;//树中已有关键字相同的结点,不再插入
}//InsertBST由上述过程可知,由无序序列输入建立二叉排序树,再对其进行中序遍历可得一个有序序列,这种方法便是树排序。数据结构*基于二叉树的删除运算从二叉排序树中删除一个结点*p时,相当于删除有序序列中的一个元素,但要保证删除后所得的二叉树仍然满足BST性质。即应将*p的子树(若有)仍连接在树上且保持BST性质不变。按*p的孩子数目分三种情况进行处理。(1)待删除结点为叶结点,则直接删除该结点即可。若该结点同时也是根结点,则删除后二叉排序树变为空树。下图给出了一个删除叶结点的例子;60407030503680457520删除叶子结点20和756040703050368045数据结构*(2)待删除结点只有左子树(或右子树),而无右子树(或左子树)。根据二叉排序树的特点,可以直接将其左子树的根结点或右子树的根结点替代被删除结点的位置。60407030503680457520删除只有左子树的单孩子结点50604070304536807520数据结构*(3)待删除结点*p既有左子树又有右子树。根据二叉排序树的特点,可以1)令*p的左子树为*p的左子树,而*p的右子树为*s的右子树;2)用被删除结点中序下的前趋结点(或其中序下的后继结点)代替被删除结点,同时删除其中序下的前趋结点(或中序下的后继结点)。60407030503680457520删除具有2棵子树的结点40603670305080457520604570305036807520607030503680457520数据结构*二叉排序树的删除实现StatusDeleteBST(BiTreeT,KeyTypekey){if(!T)returnFALSE;else{if(EQ(key,T-data.key))returnDelete(T);elseif(LT(key,T-data.key)) returnDeleteBST(T-lchild,key);elsereturnDeleteBST(T-rchild,key);}}//DeleteBST数据结构*StatusDelete(BiTreep){if(!p-rchild){//右子树空则只需重接它的左子树 q=p;p=p-lchild;free(q);}elseif(!p-lchild){//只需重接它的右子树q=p;p=p-rchild;free(q);}else{//左右子树均不空q=p;s=p-lchild;while(s-rchild)//转左,然后向右到尽头{q=s;s=s-rchild;}p-data=s-data;//s指向被删结点的“后继”if(q!=p)q-rchild=s-lchild;elseq-lchild=s-lchild;free(s);}returnTRUE;}//Delete数据结构*平衡二叉树二叉排序树上实现的查找等基本操作的平均时间虽然为O(log2n),但在最坏情况下,二叉排序树退化成一个具有单个分支的单链表,此时树高增至n,这将使这些操作的时间相
文档评论(0)