红黑树满足一下规则
1. 每个节点不是红色就是黑色
2.根节点为黑色
3.如果节点为红,其子节点必须为黑
4.任一节点至nil的任何路径,所包含的黑节点数必须相同。
5.叶子节点nil为黑色
当破坏了平衡时,在调整的时候需要用到左旋和右旋
左旋:
右旋:
代码实现:
1 void rb_tree::__rb_tree_rotate_left(link_type x) { 2 link_type y = x->right; 3 x->right = y->left; 4 if(y->left != nil) { 5 y->left->parent = x; 6 } 7 y->parent = x->parent; 8 if(x == root) { 9 root = y; 10 } else if(x == x->parent->left) { 11 x->parent->left = y; 12 } else { 13 x->parent->right = y; 14 } 15 x->parent = y; 16 y->left = x; 17 }