红黑树满足一下规则

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 }
左旋转

相关文章:

  • 2021-05-18
  • 2022-02-04
  • 2022-01-18
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-12-26
  • 2021-12-05
  • 2021-09-15
  • 2021-09-30
  • 2021-09-20
相关资源
相似解决方案