Professional Documents
Culture Documents
h>
#include <stdlib.h>
typedef struct rb_node
} t_rb_node;
typedef struct
{
t_rb_node *root;
} t_rb_arbore;
y->left=x;
x->parent=y;
}
z->parent->color=black;
z->parent->parent->color=red;
right_rotate(t,z->parent->parent);
}
else
{ if (y->color==red)
{ z->parent->color=black;
y->color=black;
z->parent->color=red;
z=z->parent->parent;
}
else if (z==z->parent->right)
{z=z->parent;
left_rotate(t,z);
}
z->parent->color=black;
z->parent->parent->color=red;
right_rotate(t,z->parent->parent);
}
}
t->root->color=black;
}
rb_insert(t_rb_arbore *t, t_rb_node *z)
{ t_rb_node* y=NULL;
t_rb_node* x=t->root;
while (x!=NULL)
{ y=z;
if (z->key<x->key)
x=x->left;
else
x=x->right;
}
z->parent=y;
if (z->key<y->key)
y->left=z;
else
y->right=x;
z->left=NULL;
z->right=t->NULL;
z->color=red;
rb_insert_fixup(t,z);
}
int main ()
{ t_rb_arbore *t;
t_rb_node *n;
int x;
while (x!=0)
{ n=create_node(t,x);
rb_insert(t,n);
printf("x="); scanf("%d", &x);
}
printf("In-order walk:");
inorder_walk(t);
printf("\n");
printf("Regasire nod x="); scanf("%d",&x);
n= tree_search(t->root,x);
if(n!=NULL)
printf("Nodul cu cheia %d gasit", n->key);
else
printf("Nodul nu a fost gasit");