首页 > 代码库 > 红黑树的旋转(C语言)

红黑树的旋转(C语言)

1.红黑树为什么要执行旋转操作

原因:红黑树在执行Insert和Delete对二叉搜索树进行操作时,结果可能会违反红黑树的性质,需要改变树中某些结点的颜色和指针结构。

指针结构的修改:通过左旋、右旋来改变的。

特点:旋转操作保持二叉搜索树性质的局部性操作。

2.算法代码

 

 1 //左旋 2 static void rbTreeLeftRotate(RBTree *rbTree, RBTreeNode *x) 3 { 4     RBTreeNode *y; 5  6     y = x->right;        //设置一个指针型变量来存放x右孩子的地址, 7     x->right = y->left;    //此处将x的右孩子替换成y的左孩子 8  9     if (y->left !=NULL)10         y->left->parent = x;11     12     y->parent = x->parent;13 14     if (x->parent == NULL)15         *rbTree = y;16     else 17     {18     if (x->parent->left == x)19         x->parent->left = y;20     else21         x->parent->right = y;    22     }23     y->left = x;24     x->parent  = y;25 }

 

 1 //右旋 2 static void rbTreeRightRotate(RBTree *rbTree, RBTreeNode *x) 3 { 4     RBTreeNode *y; 5  6     y = x->left; 7     x->left = y->right; 8  9     if (y->right !=NULL)10         y->right->parent  = x;    //link  y->right to x->left11 12     y->parent = x->parent ;        13     if (x->parent == NULL)        //link  x->parent to y14         *rbTree = y;15     else16         {17         if (x->parent->left = x)18             x->parent->left = y;19         else20           x->parent->right = y;21         }22     y->right = x;23     x->parent = y;24 25 }

 

红黑树的旋转(C语言)