毕业设计数据结构b类红黑二叉树Word格式文档下载.docx

上传人:b****2 文档编号:5045161 上传时间:2023-05-04 格式:DOCX 页数:33 大小:18.80KB
下载 相关 举报
毕业设计数据结构b类红黑二叉树Word格式文档下载.docx_第1页
第1页 / 共33页
毕业设计数据结构b类红黑二叉树Word格式文档下载.docx_第2页
第2页 / 共33页
毕业设计数据结构b类红黑二叉树Word格式文档下载.docx_第3页
第3页 / 共33页
毕业设计数据结构b类红黑二叉树Word格式文档下载.docx_第4页
第4页 / 共33页
毕业设计数据结构b类红黑二叉树Word格式文档下载.docx_第5页
第5页 / 共33页
毕业设计数据结构b类红黑二叉树Word格式文档下载.docx_第6页
第6页 / 共33页
毕业设计数据结构b类红黑二叉树Word格式文档下载.docx_第7页
第7页 / 共33页
毕业设计数据结构b类红黑二叉树Word格式文档下载.docx_第8页
第8页 / 共33页
毕业设计数据结构b类红黑二叉树Word格式文档下载.docx_第9页
第9页 / 共33页
毕业设计数据结构b类红黑二叉树Word格式文档下载.docx_第10页
第10页 / 共33页
毕业设计数据结构b类红黑二叉树Word格式文档下载.docx_第11页
第11页 / 共33页
毕业设计数据结构b类红黑二叉树Word格式文档下载.docx_第12页
第12页 / 共33页
毕业设计数据结构b类红黑二叉树Word格式文档下载.docx_第13页
第13页 / 共33页
毕业设计数据结构b类红黑二叉树Word格式文档下载.docx_第14页
第14页 / 共33页
毕业设计数据结构b类红黑二叉树Word格式文档下载.docx_第15页
第15页 / 共33页
毕业设计数据结构b类红黑二叉树Word格式文档下载.docx_第16页
第16页 / 共33页
毕业设计数据结构b类红黑二叉树Word格式文档下载.docx_第17页
第17页 / 共33页
毕业设计数据结构b类红黑二叉树Word格式文档下载.docx_第18页
第18页 / 共33页
毕业设计数据结构b类红黑二叉树Word格式文档下载.docx_第19页
第19页 / 共33页
毕业设计数据结构b类红黑二叉树Word格式文档下载.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

毕业设计数据结构b类红黑二叉树Word格式文档下载.docx

《毕业设计数据结构b类红黑二叉树Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《毕业设计数据结构b类红黑二叉树Word格式文档下载.docx(33页珍藏版)》请在冰点文库上搜索。

毕业设计数据结构b类红黑二叉树Word格式文档下载.docx

StatusDestroyStack(LinkStack*L);

StatusStackLength(LinkStack*L);

StatusPushStack(LinkStack*L,RedBlackNode*r);

RedBlackNode*PopStack(LinkStack*L);

RedBlackNode*RBserach(RedBlackNode*rbtree,intkey);

RedBlackNode*RBMinimum(RBTree*T);

RedBlackNode*RBMaximum(RBTree*T);

RedBlackNode*RBpioneer(RedBlackNode*T);

RedBlackNode*RBsucceed(RedBlackNode*T);

voidleft_rotate(RBTree*rbtree,RedBlackNode*T);

voidright_rotate(RBTree*retree,RedBlackNode*T);

BOOLRBInsertNode(RBTree*T,intdata);

intRBDeleteNode(RBTree*T,intdata);

voidRbTreeInsertAdjust(RBTree*T,RedBlackNode*p);

voidRbTreeDeleteAdjust(RBTree*T,RedBlackNode*parent,RedBlackNode*x);

voidOutput(RedBlackNode*p);

voidPreorderTraverse(RedBlackNode*T);

voidInorderTraverse(RedBlackNode*T);

voidPostorderTraverse(RedBlackNode*T);

intprerecursion(RedBlackNode*T);

intinrecursion(RedBlackNode*T);

intpostrecursion(RedBlackNode*T);

voidmenu1();

voidmenu2();

voidlogon();

LinkStack*InitStack()

LinkStack*L;

L=(LinkStack*)malloc(sizeof(LinkStack));

L->

next=NULL;

returnL;

}

StatusStackEmpty(LinkStack*L)

if(L->

next)

{

returnFALSE;

}

else

returnTRUE;

StatusDestroyStack(LinkStack*L)

LinkStack*p,*r,*q;

p=L->

next;

r=L;

if(p==NULL)

returnFALSE;

while(p!

=NULL)

r->

next=p->

q=p;

p=p->

free(q);

free(L);

StatusStackLength(LinkStack*L)

inti=0;

LinkStack*p;

if(L==NULL)

i++;

p=p->

returni;

RedBlackNode*PopStack(LinkStack*L)

{

RedBlackNode*q;

p=L;

while(p->

next&

&

p->

next->

next!

q=p->

rbtree;

p->

returnq;

StatusPushStack(LinkStack*L,RedBlackNode*r)

LinkStack*p,*stacknode=(LinkStack*)malloc(sizeof(LinkStack));

stacknode->

rbtree=r;

next=stacknode;

RedBlackNode*RBserach(RBTree*rbtree,intkey)//查找值为key的节点

RedBlackNode*T;

T=*rbtree;

while(T!

=NULL&

T->

data!

=key)

if(key<

data)

{

T=T->

left;

}

else

right;

Output(T);

returnT;

RedBlackNode*RBMinimum(RBTree*T)//返回红黑树局部最小值

RedBlackNode*curNode,*targetNode;

curNode=*T;

targetNode=NULL;

if(curNode!

targetNode=curNode;

curNode=curNode->

returntargetNode;

RedBlackNode*RBMaximum(RBTree*T)//返回红黑树局部最大值

RedBlackNode*RBpioneer(RedBlackNode*T)//返回T的前驱

RedBlackNode*targetNode;

RedBlackNode*P;

P=NULL;

if(T==NULL)

returnP;

if(T->

left!

targetNode=RBMaximum(&

(T->

left));

else

while(T->

parent!

parent->

right!

=T)

T=T->

parent;

targetNode=T->

RedBlackNode*RBsucceed(RedBlackNode*T)//后继节点

targetNode=RBMinimum(&

right));

targetNode=T->

voidleft_rotate(RBTree*rbtree,RedBlackNode*T)//左旋

RedBlackNode*p;

p=T->

T->

right=p->

if(p->

p->

left->

parent=T;

parent=T->

parent==NULL)

{

*rbtree=p;

left==T)

T->

left=p;

right=p;

}

left=T;

parent=p;

voidright_rotate(RBTree*retree,RedBlackNode*T)

left=p->

right->

*retree=p;

right=T;

BOOLRBInsertNode(RBTree*T,intdata,char*name,char*phone)

RedBlackNode*node,*p,*curNode;

node=(RedBlackNode*)malloc(sizeof(RedBlackNode));

if(node==NULL)

node->

data=data;

strcpy(node->

phone,phone);

name,name);

color=RED;

left=NULL;

right=NULL;

parent=NULL;

p=NULL;

while(curNode!

p=curNode;

if(data<

curNode->

*T=node;

if(data<

left=node;

}

right=node;

RbTreeInsertAdjust(T,node);

intRBDeleteNode(RBTree*T,intdata,char*name,char*phone)

RedBlackNode*child,*target,*realdel;

target=RBserach(T,data);

if(target!

if(target->

left==NULL||target->

right==NULL)

realdel=target;

realdel=RBsucceed(target);

if(realdel->

child=realdel->

if(child!

child->

parent=realdel->

*T=child;

if(realdel->

left==realdel)

realdel->

left=child;

right=child;

=realdel)

target->

data=realdel->

data;

strcpy(target->

color==BlACK)

RbTreeDeleteAdjust(T,realdel->

parent,child);

free(realdel);

voidRbTreeInsertAdjust(RBTree*T,RedBlackNode*p)

RedBlackNode*q,*uncle,*grandparent;

while((q=p->

parent)!

q->

color==RED)

grandparent=q->

if(q==grandparent->

left)

uncle=grandparent->

if(uncle!

uncle->

{

grandparent->

q->

color=BlACK;

uncle->

p=grandparent;

}

else

if(p==q->

right)

{

p=q;

left_rotate(T,p);

q=p->

}

else

q->

grandparent->

right_rotate(T,grandparent);

uncle=grandparent->

if(uncle!

grandparent->

q->

uncle->

p=grandparent;

if(p==q->

p=q;

right_rotate(T,p);

q=p->

left_rotate(T,grandparent);

(*T)->

voidRbTreeDeleteAdjust(RBTree*T,RedBlackNode*parent,RedBlackNode*x)

RedBlackNode*brother;

while((x==NULL||x->

color==BlACK)&

x!

=*T)

if(x==parent->

brother=parent->

if(brother->

brother->

parent->

left_rotate(T,parent);

brother=parent->

}

if((brother->

left==NULL||brother->

(brother->

right==NULL||brother->

color==BlACK))

x=parent;

parent=parent->

if(brother->

brother->

right_rotate(T,brother);

brother=parent->

color=parent->

color;

x=*T;

if(brother->

brother->

parent->

right_rotate(T,parent);

if((brother->

left_rotate(T,brother);

right_rotate(T,parent);

if(x!

x->

}

}

voidOutput(RedBlackNode*p)

printf("

data:

%d,color:

%s,parent:

%d,name:

%s,phone:

%s\n"

data,(p->

color==RED?

"

RED"

:

BlACK"

),

(p->

parent!

=NULL)?

data:

-1,p->

name,p->

phone);

voidPreorderTraverse(RedBlackNode*T)

LinkStack*L=InitStack();

p=T;

while(p||!

StackEmpty(L))

while(p)//遍历左子树

Output(p);

PushStack(L,p);

if(!

StackEmpty(L))//通过下一次循环中的内嵌while实现右子树遍历

p=PopStack(L);

voidInorderTraverse(RedBlackNode*T)

L=InitStack();

while(p!

=NULL||!

=NULL)//遍历左子树

PushStack(L,p);

p=PopStack(L);

Output(p);

//访问根结点

//通过下一次循环实现右子树遍历

DestroyStack(L);

voidPostorderTraverse

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2