#include <stdio.h>
#include <stdlib.h>
#define RED 1
#define BLACK 0
typedef struct RBTreeNode
{
int key;
int color;
RBTreeNode *p;
RBTreeNode *left;
RBTreeNode *right;
}RBT,*pRBT;
pRBT nil=(pRBT)malloc(sizeof(RBT));
int bh=0;
void initNil()
{
nil->key=-1;
nil->color=BLACK;
nil->p=NULL;
nil->left=NULL;
nil->right=NULL;
}
void leftRotate(pRBT *root,pRBT x)
{
//左旋要有右子树
if(x->right==nil)
return;
pRBT y=x->right;
x->right=y->left;
if(y->left != nil)
y->left->p=x;
y->p=x->p;
if(x->p==nil)
{
(*root)=y;
}
else if(x == x->p->left)
{
x->p->left=y;
}
else
{
x->p->right=y;
}
y->left=x;
x->p=y;
}
void rightRotate(pRBT *root,pRBT y)
{
//右旋要有左子树
if(y->left==nil)
return;
pRBT x=y->left;
y->left=x->right;
x->p=y->p;
if(x->right != nil)
x->right->p=y;
if(y->p==nil)
{
(*root)=x;
}
else if(y==y->p->left)
{
y->p->left=x;
}
else
{
y->p->right=x;
}
x->right=y;
y->p=x;
}
void rbInsertFixup(pRBT *root,pRBT