数据结构红黑树概念回顾什么是_第1页
数据结构红黑树概念回顾什么是_第2页
数据结构红黑树概念回顾什么是_第3页
数据结构红黑树概念回顾什么是_第4页
数据结构红黑树概念回顾什么是_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

aparticularwayofstoringandorganizingdatainacomputersothatitcanused Color:boolorKey:anytypewhichisLeft:apointeroftree’snodethatpointstoleftRight:apointeroftree’snodethatpointstorightParent:apointeroftree’snodethatpointsto所 性质1性质2性质3.所有叶子都是黑色(叶子是NIL节点)性质5

哨兵节点。哨兵节点表示是这颗树的边界。哨兵节点和树的普通节点有着相同的域(就是一个普通的节点),除了 有至少2𝑏ℎ(𝑣)-1个内中bh(v)=从v到 SEARCHPREDECESORSUCCESSOR 些操作的时间复杂度也是O(lg 是O(lgn)(uncle)

nodegrandparent(noden)}nodeuncle(noden)if(n->parent==elsereturngrandparent(n)-}:voidinsert_case1(noden)if(n->parent==NIL)n->color=BLACK;elseinsert_case2(n);}:voidinsert_case2(noden)if(n->parent->colorBLACKreturn/*else}

Caseremains:P情形3:如果父节点P和叔父节点U二者都是红色,(此时新插入节点N做为P的左子节点或右子节点都voidinsert_case3(noden)if(uncle(n)!=NIL&&uncle(n)->color==RED){n->parent->color=BLACK;uncle(n)->color=BLACK;grandparent(n)->color=RED;}else}LeftChild->key<=node->key<=RightChild-

voidrotate_right(pivot){parent=pivot->parent;root=parent->parent;

parent->left=pivot->right;if(pivot->right!=null){pivot->right->parent=}pivot->parent=if(parent==root-root->left=}elseroot->right=}pivot->right=parent;parent->parent=pivot;}

Caseremains:P[red],U:voidinsert_case4(noden)if(n==n->parent->rightn->parent==grandparent(n)->left)n=n-}elseif(n==n->parent->leftn->parent==grandparent(n)->right)n=n->right;}}

Caseremains:P[red],UN[red]inthe“outerlayer”ofthe情形5父节点P是红色而叔父节点U是黑色或缺少,新节点N是其父节点的左子节点,而父节点P又是其父节点G的左子节点。在这种情形下,我们进行针对祖父节点G的一次右旋转,并改变P和G的voidinsert_case5(noden){n->parent->color=BLACK;grandparent(n)->color=RED;if(n==n->parent->left&&n->parent==grandparent(n)->left)}else{/*Here,n==n->parent->rightn->parent==grandparent(n)->right}} SL(LeftSon)称为S的左儿子,SR(RightSon)称为S兄弟节点:sibling(structnode*nif(n==n->parent-returnn->parent-elsereturnn->parent-}voiddelete_one_child(structnode*n)/**Precondition:nhasatmostonenon-nullchild.*/structnode*child=is_leaf(n->right)?n->left:n->right; ce_node(n,child);if(n->color==BLACK)if(child->color==RED)child->color=elsedelete_case1(child);//entrythefirst}}voiddelete_case1(structnode*n)if(n->parent!=NIL)}2S是红色。在这种情况下我们在N的父亲上做左旋转,把红色兄弟转换成NN的父亲和祖父的颜色。voiddelete_case2(structnode*n){structnode*s=sibling(n);if(s->color==RED)n->parent->color=RED;s->color=BLACK;if(n==n->parent-elserotate_right(s);

Caseremains:S[black],P[blackOr3N的父亲、S和S绘Svoiddelete_case3(structnode*n)structnode*s=if((n->parent->color==&&(s->color==&&(s->left->color==&&(s->right->color==BLACK))s->color=}else}

Case S[black],P[black],Notbothof𝑆𝐿𝑎𝑛𝑑𝑆𝑅𝑎𝑟𝑒S[black],情况4:S和S的儿子都是黑色,但是N简单的交换Nvoiddelete_case4(structnodestructnode*s=if((n->parent->color==&&(s->color==&&(s->left->color==&&(s->right->color==BLACK)){s->color=RED;n->parent->color=}else}

Caseremains:S[black],Notbothof𝑆𝐿𝑎𝑛𝑑𝑆𝑅𝑎𝑟𝑒情况5:S是黑色,S的左儿子是红色,S的右儿子是黑色,而N是它父亲的左儿子。在这种情况下我们在S上做右旋转,这样S的左儿子成为S的父亲和N的新兄弟。我们接着交换S和它的新父亲的颜色。voiddelete_case5(structnode*n)structnode*s=if(s->color==BLACK){//Is“ifstatement”if((n==n->parent-&&(s->right->color==BLACK)&&(s->left->color==//Areall“teststatements”s->color=s->left->color=}elseif((n==n->parent-&&(s->left->color==BLACK)&&(s->right->color==s->color=s->right->color=BLACK;

Caseremains:S[black],thefarthersonofSfromNis情况6:S是黑色,S的右儿子是红色,而N是它父亲的左儿子。在这种情况下我们在N的父亲上做左旋转,这样S成为N的父亲和S的右儿子的父亲。我们接着交换NSS的右儿子为黑色。voiddelete

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论