C++手撸红黑树
年后接着撸,撸了part1的简单版本。
#include <iostream>
using namespace std;
enum color
{
BLACK, RED
};
enum state
{
BLACK_RED_RED_LEFT_LEFT,
SUITABLE
};
typedef struct node
{
int value;
int color;
node *left;
node *right;
};
int get(node *n)
{
if(n->left != NULL && n->left->left != NULL){
if(n->left->color == RED && n->left->left->color == RED){
if(n->right != NULL){
n->right->color = BLACK;
}
return BLACK_RED_RED_LEFT_LEFT;
}
}
else{
return SUITABLE;
}
}
node* left_left_rotate(node *n)
{
node* temp = n->left;
temp->color = BLACK;
n->color = RED;
n->left = temp->right;
temp->right = n;
return temp;
}
node *insert(node *n, int value)
{
static bool is_root = true;
if(n == NULL)
{
node *n = new node;
n->value = value;
if(is_root == true){
is_root = false;
n->color = BLACK;
}
else{
n->color = RED;
}
n->left = NULL;
n->right = NULL;
return n;
}
else
{
if(value < n->value)
{
n->left = insert(n->left, value);
int mode = get(n);
if(mode == BLACK_RED_RED_LEFT_LEFT)
{
n = left_left_rotate(n);
}
}
else if(value > n->value)
{
n->right = insert(n->right, value);
}
return n;
}
}
int main()
{
node *root = NULL;
root = insert(root,10);
root = insert(root,5);
root = insert(root,2);
cout << root->value;
system("pause");
return 0;
}