ree_node * rbtree_create(int num){
rbtree_node *p;
p = (rbtree_node *)malloc(sizeof(rbtree_node));
p->key.value = num;
p->data.value = 0;
p->color = RB_RED;
p->left = rb_nil;
p->right = rb_nil;
p->parent = rb_nil;
return p;
}
rbtree_node * rbtree_add(rbtree_node **root,int num){
rbtree_node *p;
p = rbtree_create(num);
rbtree_insert(root,p);
}
rbtree_node * rbtree_find(rbtree_node *t,int num){
rbtree_key key;
key.value = num;
return rbtree_search(t,key);
}
void rbtree_destroy(rbtree_node *t){
if(rb_nil == t) return;
rbtree_node *p;
p = t;
free(t);
if(p->left) rbtree_destroy(p->left);
if(p->right) rbtree_destroy(p->right);
}
void rbtree_print(rbtree_node * t){
if(rb_nil == t) return;
printf(" %d-%d\n",t->key.value,t->color);
printf(" ");
printf(" \n");
if(t->left != rb_nil){
printf(" %d-%d",t->left->key.value,t->left->color);
}else{
printf(" nil-%d",t->left->color);
}
if(t->right != rb_nil){
printf(" %d-%d",t->right->key.value,t->right->color);
}else{
printf(" nil-%d",t->right->color);
}
printf("\n");
rbtree_print(t->left);
rbtree_print(t->right);
}
#include
#include
#include "lib/rb_tree.h"
rbtree_node * rbtree_create(int num);
rbtree_node * rbtree_add(rbtree_node **root,int num);
void rbtree_destroy(rbtree_node *t);
void rbtree_print(rbtree_node * t);
rbtree_node * rbtree_find(rbtree_node *t,int num);
int main(int argc,char *argv[]){
rbtree_node *t,*p,*max,*min;
int arr[] = {9,8,11,18,2,5,16,1,8};
int i;
rbtree_init_nil();
t = rbtree_create(10);
t->color = RB_BLACK;
for(i=0;i<9;i++){
rbtree_add(&t,arr[i]);
rbtree_print(t);
printf("=================\n");
}
p = rbtree_min(t);
printf("%d:%p p:%p,l:%p,r:%p\n",p->key.value,p,p->parent,p->left,p->right);
while((p=rbtree_successor(p)) != rb_nil){
printf("%d:%p p:%p,l:%p,r:%p\n",p->key.value,p,p->parent,p->left,p->right);
}
printf("\n");
min = rbtree_min(t);
printf("t:%p,min:%p\n",t,min);
do{
printf("--------------\n");
rbtree_print(t);
max = rbtree_max(t);
printf("%d ",max->key.value);
p = max;
while((p=rbtree_predecessor(p))!=rb_nil){
printf("%d ",p->key.value);
}
printf("\n");
rbtree_delete(&t,max);
}while(t!=rb_nil);
printf("\nt:%p\n",t);
rbtree_destroy(t);
rbtree_destroy_nil();
return 0;
}
rbtree_node * rbtree_create(int num){
rbtree_node *p;
p = (rbtree_node *)malloc(sizeof(rbtree_node));
p->key.value = num;
p->data.value = 0;
p->color = RB_RED;
p->left = rb_nil;
p->right = rb_nil;
p->parent = rb_nil;
return p;
}
rbtree_node * rbtree_add(rbtree_node **root,int num){
rbtree_node *p;
p = rbtree_create(num);
rbtree_insert(root,p);
}
rbtree_node * rbtree_find(rbtree_node *t,int num){
rbtree_key key;
key.value = num;
return rbtree_search(t,key);
}
void rbtree_destroy(rbtree_node *t){
if(rb_nil == t) return;
rbtree_node *p;
p = t;
free(t);
if(p->left) rbtree_destroy(p->left);
if(p->right) rbtree_destroy(p->right);
}
void rbtree_print(rbtree_node * t){
if(rb_nil == t) return;
printf(" %d-%d\n",t->key.value,t->color);
printf(" ");
printf(" \n");
if(t->left != rb_nil){