version 1.5, 2010/03/04 12:21:36 |
version 1.6, 2013/02/04 15:29:00 |
|
|
{ |
{ |
struct rbnode *sibling; |
struct rbnode *sibling; |
|
|
while (node->color == black && node != rbroot(tree)) { |
while (node->color == black && node != rbfirst(tree)) { |
if (node == node->parent->left) { |
if (node == node->parent->left) { |
sibling = node->parent->right; |
sibling = node->parent->right; |
if (sibling->color == red) { |
if (sibling->color == red) { |
|
|
node->parent->color = black; |
node->parent->color = black; |
sibling->right->color = black; |
sibling->right->color = black; |
rotate_left(tree, node->parent); |
rotate_left(tree, node->parent); |
node = rbroot(tree); /* exit loop */ |
node = rbfirst(tree); /* exit loop */ |
} |
} |
} else { /* if (node == node->parent->right) */ |
} else { /* if (node == node->parent->right) */ |
sibling = node->parent->left; |
sibling = node->parent->left; |
|
|
node->parent->color = black; |
node->parent->color = black; |
sibling->left->color = black; |
sibling->left->color = black; |
rotate_right(tree, node->parent); |
rotate_right(tree, node->parent); |
node = rbroot(tree); /* exit loop */ |
node = rbfirst(tree); /* exit loop */ |
} |
} |
} |
} |
} |
} |