版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2两边子树等高为0“-”表示左重-1“/”表示右重+1“\”表示 一一AVLAVL树的高度是O(logn)的,它的平均
a-=-a-=0a-=//a-a--- \a-\a-b-\a--cc1.a->bf1,则a->bf0,以a为根的子2.a->bf0,则a->bf1,以a为根的子3.a->bf1,则a->bf+2
RR型旋转以avoidRR_rotation(AVLBinNode*a,AVLBinNode*&b){b=a-a->right=b- a->bf=b->left= b->bf=}
{AVLBinNodeb=a- c=b-a->right=c->left; b->left=c->right;c->left=a; c->right=b;switch(c->bf){case-1:a->bf=0; b->bf=1;//toleft 1:a->bf=-1; b->bf=0;//toright 0a->bfb->bf0;c c->bf= b=}ababccabLL型旋转以avoidLL_rotation(AVLBinNode*a,AVLBinNode*&b){b=a-a->left=b- a->bf=b->right= b->bf=}LR型旋转以avoidLR_rotation(AVLBinNode*a,AVLBinNode*&b){b=a- c=b-a->left=c->right; b->right=c->left;c->right=a; c->left=b;switch(c->bf){case-1:a->bf=1; b->bf=0;//toleft 1:a->bf=0; b->bf=-1;//toright 0a->bfb->bf0;c就是新叶}c->bf= b=}voidins_AVLtree(AVLBinNode*&rt,BELEMkey){AVLBinNode*s,*a,*b,*f,*p,*q;boolbalanced;ints=news->element=s->left=s->right=NULL; s->bf=0;if(rt==NULL){rt=s;return;}f=NULL;a=p=rt;q=查找swhilepNULL if(p->bf!=0){a=p;f=q;q=if(s->element<q->element)p=p->left;elsep=p-}if(s->element<q->element) q->left=s;elseq->right=if(s->element<a->element){//在a的左子树p=a->left;b=p;d=-1; elsepa->right;bp;d1;while(p!=s)if(s->element<p-{p->bf=-1;p=p-}else{p->bf= p=p->right;balanced=ifa->bf0)a->bf aelseif(a->bfd0)a->bf0;else{//失衡balancedFALSE;if(d==-1){if(b->bf==-1)LL_rotation(a,elseLR_rotation(a,b); //b->bf==+1}else{if(b->bf==+1)RR_rotation(a,elseRL_rotation(a, //b->bf==-1if(!balanced)if(f==NULL)rt=b;//a为根elseif(f->lefta)f->leftb;elsef->right=b;//f->right==}}二二AVL t(0)=1,t(1)= t(2)=t(i)=t(i-1)+t(i-2)+i3log(t(i)1)13log(n (2) AVL树的高度是O(logn)级的。因此,AVL树的插入、检索效率是O(logn)级通常高度i=log2n+C13.213.2xxaeulmlmxaxaeulmlm****you*nm** 用不同的类实现分支结点和叶结点typedefchar*Attr;classCharTreeNode{//Nodebaseclasscharsymbol;//symbolofchartreevirtualboolisLeaf()=0;//ForderivedclassIntlNode:publicCharTreeNode{CharTreeNode*left,*right;//ChildrenIntlNode(constchar&sym,CharTreeNode*l,CharTreeNode*r)//Constructor{symbol=sym;left=l;right=r;boolisLeaf(){returnFALSE;}//SubclassCharTreeNode*leftchild(){returnleft;}CharTreeNode*rightchild(){returnright;}voidsetleft(CharTreeNode*leftval){left=leftval;}//setleftchildvoidsetright(CharTreeNode*rightval){right=rightval;}//setcharvalue(){returnsymbol;}// classLeafNode:publicCharTreeNode{//LeafAttrattribute; //attributepropertyCharTreeNode*right;LeafNode(constAttr&val,CharTreeNode*rightsib=NULL){attribute=val;symbol='*';right=rightsib;}boolisLeaf(){returnTRUE;}//SubclassAttr&value(){returnattribute;}//nodevalueCharTreeNode*rightchild(){returnright;}voidtraverse(CharTreeNode*rt){//Preorderif(rt==NULL)return; //Nothingtovisitif(rt->isLeaf()){ //Doleafnodecout<<"Leaf:"<<((LeafNode*)rt)-}else{ //Dointernalnodetraverse(((IntlNode*)rt)->leftchild());traverse(((IntlNode*)rt)->rightchild());}
找双链树中结点,rt为根,val为要找的Attrdoubletree_search(CharTreeNode*rt,char*val){inti=0,len; p=rt; len=strlen(val);while(p!=NULL&&i<len)while(p!=NULL&&p->symbol<val[i])p=((IntlNode*)p)->rightchild();if(p==NULL||p->symbol>val[i])returnNULL;p((IntlNode*)p)->leftchild( //继续查找下一位 if(p==returnNULL;elseif(p->isLeaf())elsereturnNULL;没有对应的}//rt为根,q为p的前驱,attribute为要插入的属性。AttrinsertLeaf(CharTreeNode*&rt,CharTreeNode*q, CharTreeNode*p,Attrattribute){CharTreeNode*s; Attrtempattr;tempattr=newchar[strlen(attribute)];strcpy(tempattr,attribute);s=newLeafNode(tempattr,p);if(q==NULL) rt=s;elseif(((IntlNode*)q)->leftchild()==p)((IntlNode*)q)->setleft(s);else((IntlNode*)q)->setright(s);return((LeafNode*)s)->value(); //rt为根,q为p的前驱,attribute为要插入的属性AttrinsertSubtree(CharTreeNode*&rt,CharTreeNode*q, CharTreeNode*p,char*val,inti,Attr{CharTreeNode*s;intlen=s=newIntlNode(val[i],NULL,p);if(q==NULL)rt=s;elseif(((IntlNode*)q)->leftchild()==p)((IntlNode*)q)->setleft(s);else((IntlNode*)q)-}for(intj=i+1;j<len;j++)p=newIntlNode(val[j],NULL,s=((IntlNode*)s)-}returninsertLeaf(rt,s,NULL,}插入普通的关键码,关键码并不需要以“*”结尾Attrdoubletree_insert(CharTreeNode*&rt,char*val,Attrattribute){inti=0,len; CharTreeNode*p,*q;p=rt; q=NULL;len=strlen(val);if(rt==NULL)returninsertSubtree(rt,q,val,i,attribute);while(p!=NULL&&i<len){while(p!=NULL&&p->symbol<{q=p=((IntlNode*)p)->rightchild( if(p!=NULL&&p->symbol=={q=p=((IntlNode*)p)->leftchild(ifilen-1i++;elseif(p-return((LeafNode*)p)->value();elsereturninsertLeaf(rt,q,p, elsereturninsertSubtree(rt,q,p,val,i,}//ofwhile(p!=NULL&&i<len)returnNULL; 设基为d(字母为d=26,数字为d(1)h(1+d)/2(2)最大存储空间为三三trietypedefcharELEM; typedefELEM*Attr;constbase=26; conststart='a';enumNodetype{leafnode,internal};classTrieNode{ //GenericnodeclassNodetypemytype;//Typeforthisnodecharsymbol; //Internalnodevalueunion{struct{//StructureforinternalnodeTrieNode*trieptr[base+1];int //thenumberof}struct{ //StructforleafnodeELEM*data; //keyofleafnodeAttrattribute;//Thepropertyof} TrieNode(constAttrval)//Constructor:{mytype=leafnode;leaf.attribute=val;TrieNode(intcnt=0){//Constructor:Internalmytype=internal;intl.count=cnt;for(inti=0;i<base+1;i++)intl.trieptr[i]=NULL;}boolisLeaf(){returnmytype==leafnode;voidtraverse(TrieNode*rt){//Preorderif(rt==NULL)return;if(rt-cout<<"Leaf:"<<rt-<<elsefor(inti=0;i<base+1;i++)}}rt为根,q为前驱,attribute为要插入的属性。AttrinsertLeaf(TrieNode*q,Attrattribute){TrieNodes=newTrieNode(attribute);q->intl.trieptr[0]=s;s->leaf.attribute=newchar[strlen(attribute)];strcpy(s->leaf.attribute,attribute);returns-}AttrinsertSubtree(TrieNode*&q,ELEM*val,intk,Attrattribute){TrieNode*s; len=strlen(val);s=newTrieNode(0);if(q==NULL)q=s;else{q->intl.trieptr[val[k]-start+1]=s;}for(intj=k+1;j<len;j++)newTrieNode(0);}returninse
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全小活动策划案
- 2024年度智能办公系统定制合同
- 2024年度医疗机构设备采购贷款合同
- MG5天蝎座上市传播策略
- 2024年度房地产买卖合同:购房者与开发商之间的房屋买卖
- 04版技术转让与代理合同
- 2024年度环保工程与治理合同
- 2024年度医疗设备供应商与医院采购合同
- 2024年度演艺活动场地租赁合同
- 2024年度IT技术支持服务存放租赁合同
- 中国历史文选第四单元 典志体政书、诏令奏议
- YS/T 22-2010锑酸钠
- YC/T 11.4-2006烟草机械产品图样及设计文件第4部分:编号原则
- RB/T 047-2020检验检测机构管理和技术能力评价设施和环境通用要求
- GB/T 33528-2017公共就业服务术语
- GB/T 30677-2014轻型汽车电子稳定性控制系统性能要求及试验方法
- 食品安全保障措施方案
- 九年级化学上册复习课件(1-7单元)(2)第一单元复习课件
- GB 4806.1-2016食品安全国家标准食品接触材料及制品通用安全要求
- 煤矿干部个人思想工作总结(四)
- 【外科学】微创外科技术-课件
评论
0/150
提交评论