年后接着撸,撸了part1的简单版本。
#includeusing 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; }



