毕业设计-数据结构b类红黑二叉树.doc





《毕业设计-数据结构b类红黑二叉树.doc》由会员分享,可在线阅读,更多相关《毕业设计-数据结构b类红黑二叉树.doc(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、#include#include#include#include#include #define TRUE 1#define BOOL int#define FALSE 0#define Status intenum color_tRED,BlACK;typedef struct RedBlackNode /红黑二叉树结构体 int data; char phone12;char name12; /数据域 color_t color; /颜色 RedBlackNode *left; /左孩子 RedBlackNode *right; /右孩子 RedBlackNode *parent; /父亲
2、节点 RedBlackNode,*RBTree;typedef struct LinkStack RedBlackNode *rbtree; struct LinkStack *next;LinkStack;LinkStack * InitStack();Status StackEmpty(LinkStack *L);Status DestroyStack(LinkStack *L);Status StackLength(LinkStack *L);Status PushStack(LinkStack *L,RedBlackNode *r);RedBlackNode * PopStack(Li
3、nkStack *L);RedBlackNode *RBserach(RedBlackNode *rbtree,int key);RedBlackNode *RBMinimum(RBTree *T);RedBlackNode *RBMaximum(RBTree *T);RedBlackNode *RBpioneer(RedBlackNode *T);RedBlackNode *RBsucceed(RedBlackNode *T);void left_rotate(RBTree *rbtree,RedBlackNode *T);void right_rotate(RBTree *retree,R
4、edBlackNode *T);BOOL RBInsertNode(RBTree *T,int data);int RBDeleteNode(RBTree *T, int data);void RbTreeInsertAdjust(RBTree *T,RedBlackNode *p);void RbTreeDeleteAdjust(RBTree *T,RedBlackNode *parent,RedBlackNode *x);void Output(RedBlackNode *p);void PreorderTraverse(RedBlackNode *T);void InorderTrave
5、rse(RedBlackNode *T);void PostorderTraverse(RedBlackNode *T);int prerecursion(RedBlackNode *T);int inrecursion(RedBlackNode *T);int postrecursion(RedBlackNode *T);void menu1();void menu2();void logon();LinkStack * InitStack()LinkStack *L;L=(LinkStack *)malloc(sizeof(LinkStack); L-next=NULL; return L
6、;Status StackEmpty(LinkStack *L)if(L-next) return FALSE;else return TRUE; Status DestroyStack(LinkStack *L)LinkStack *p,*r,*q;p=L-next;r=L;if(p=NULL)return FALSE;while(p!=NULL)r-next=p-next;q=p;p=p-next;free(q);free(L);return TRUE;Status StackLength(LinkStack *L)int i=0;LinkStack *p;p=L-next;if(L=NU
7、LL)return FALSE;while(p!=NULL) i+; p=p-next;return i;RedBlackNode *PopStack(LinkStack *L) LinkStack *p; RedBlackNode *q; p=L; while(p-next&p-next-next!=NULL) p=p-next; q=p-next-rbtree; p-next=NULL; return q;Status PushStack(LinkStack *L,RedBlackNode *r)LinkStack *p,*stacknode=(LinkStack*)malloc(size
8、of(LinkStack); p=L; while(p-next!=NULL) p=p-next; stacknode-rbtree=r; stacknode-next=NULL; p-next=stacknode; return TRUE;RedBlackNode *RBserach(RBTree *rbtree,int key) /查找值为key的节点 RedBlackNode *T;T=*rbtree;while(T!=NULL&T-data!=key)if(keydata)T=T-left;elseT=T-right;Output(T);return T;RedBlackNode *R
9、BMinimum(RBTree *T) /返回红黑树局部最小值 RedBlackNode *curNode, *targetNode;curNode=*T;targetNode=NULL;if(curNode!=NULL)targetNode=curNode;curNode=curNode-left;return targetNode;RedBlackNode *RBMaximum(RBTree *T) /返回红黑树局部最大值 RedBlackNode *curNode, *targetNode;curNode=*T;targetNode=NULL;if(curNode!=NULL)targe
10、tNode=curNode;curNode=curNode-right;return targetNode;RedBlackNode *RBpioneer(RedBlackNode *T) /返回T的前驱 RedBlackNode *targetNode; RedBlackNode *P; P=NULL; if(T=NULL) return P; if(T-left!=NULL) targetNode=RBMaximum(&(T-left); else while(T-parent!=NULL&T-parent-right!=T) T=T-parent; targetNode=T-parent
11、; return targetNode;RedBlackNode *RBsucceed(RedBlackNode *T) /后继节点 RedBlackNode *targetNode;RedBlackNode *P;P=NULL;if(T=NULL)return P;if(T-right!=NULL)targetNode=RBMinimum(&(T-right);elsewhile(T-parent!=NULL&T-parent-left!=T)T=T-parent;targetNode=T-parent;return targetNode;void left_rotate(RBTree *r
12、btree,RedBlackNode *T) /左旋 RedBlackNode *p;p=T-right;T-right=p-left;if(p-left!=NULL)p-left-parent=T;p-parent=T-parent;if(T-parent=NULL) *rbtree=p;else if(T-parent-left=T)T-parent-left=p;elseT-parent-right=p;p-left=T;T-parent=p;void right_rotate(RBTree *retree,RedBlackNode *T)RedBlackNode *p;p=T-left
13、;T-left=p-right;if(p-right!=NULL) p-right-parent=T;p-parent=T-parent;if(T-parent=NULL)*retree=p;else if(T-parent-left=T)T-parent-left=p;elseT-parent-right=p;p-right=T;T-parent=p;BOOL RBInsertNode(RBTree *T,int data,char *name,char *phone)RedBlackNode *node,*p,*curNode;node=(RedBlackNode *)malloc(siz
14、eof(RedBlackNode);if(node=NULL)return FALSE;node-data=data;strcpy(node-phone,phone);strcpy(node-name,name);node-color=RED;node-left=NULL;node-right=NULL;node-parent=NULL;curNode=*T;p=NULL;while(curNode!=NULL) p=curNode;if(data data) curNode=curNode-left;else curNode=curNode-right;if(p=NULL) *T=node;
15、else if(datadata)p-left=node; elsep-right=node;node-parent=p;RbTreeInsertAdjust(T,node);return TRUE;int RBDeleteNode(RBTree *T, int data,char *name,char *phone)RedBlackNode *child,*target,*realdel;target= RBserach(T,data);if(target!=NULL)if(target-left=NULL|target-right=NULL)realdel=target;elsereald
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计 数据结构 类红黑 二叉

限制150内