zoukankan      html  css  js  c++  java
  • 红黑树的旋转(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     else
    21         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->left
    11 
    12     y->parent = x->parent ;        
    13     if (x->parent == NULL)        //link  x->parent to y
    14         *rbTree = y;
    15     else
    16         {
    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 }
  • 相关阅读:
    tr加不上边框
    placeholder 用法
    <input/>文本输入框效果:
    colspan="2"、列、rowspan="3"、行、用法!
    CSS--实现小三角形
    “div+css”下拉菜单
    HDU4624 Endless Spin(概率&&dp)
    chanme的博客搬家了!
    HDU5487 Difference of Languages(BFS)
    HDU5469 Antonidas(树分治&&哈希)
  • 原文地址:https://www.cnblogs.com/super90/p/4067210.html
Copyright © 2011-2022 走看看