红黑树的特点:
1.每个结点是红色或者黑色
2.根结点是黑色
3.每个叶子结点是黑色
4.如果一个结点是红色,则它的两个儿子都是给黑色
5.对于每个结点,从该结点到子孙结点的所有路径包含相同数量的黑结点
如何实现红黑树:
typedef int KEY_TYPE;
typedef struct _rbtree_node{
unsigned char color;
struct _rbtree_node *left;
struct _rbtree_node *right;
struct _rbtree_node *parent;
KEY_TYPE key; //
void *value;
} rbtree_node;
//结点的集合才是红黑树 链表
//如何定义一颗红黑树:根结点root+叶子结点nil
typedef struct _tbtree {
rbtree_node *root; //根结点root
rbtree_node *nil; //叶子结点nil
} tbtree;
//左旋
void _left_rotate(_tbtree *T,rbtree_node *x){
rbtree_node *y = x->right; //y的
if(y->left!=T->nil)
y->left->parent = x;
y->parent = x->parent;
if(x->parent==T->nil)
T-root = y;
}else if(y==y->parent->right)
{
y->parent->right = x;
}else if(y==y->parent->left)
{
y->parent->left = x;
}
y->left = x;
x->parent = y;
}