• 红黑树-C


    #define RED 0
    #define BLACK 1
    
    typedef struct RedBlackNode{
      ElementType Data;
      RedBlackNode *Left;
      RedBlackNode *Right;
      int colour;
    };
    
    typedef struct RedBlackNode* Root;
    typedef Root RedBlackTree;
    
    void Insert(RedBlackTree T, ElementType X)
    {
        RedBlackNode *t, *parent, *grandP;
    
        if(T == NULL)  //若树为空
        {
           T = (RedBlackTree)malloc(sizeof(struct RedBlackNode));
           T->Data = X;
           T->Left = T->Right = NULL;
           T->colour = BLACK;
           return T;
        }
    
        parent = grandP = t = T;
    
        while(1)
        {
            if(t)
            {
              if(t->Left && t->Left->colour == RED &&   //如果t的两个节点都是红色 则需要进行颜色变换
                 t->Right && t->Right->colour == RED)
              {
                 t->Left->colour = t->Right->colour = BLACK;   //颜色变换
                 t->colour = RED;
                 insertAdjust(grandP,parent,t);  //调整
              }
    
              grandP = parent;
              parent = t;
              t = (t->Data > X ? t->Left:t->Right);
            }
            else
            {
    //遇到需要插入的位置 t
    = (struct RedBlackNode*)malloc(sizeof(struct RedBlackNode)); t->Data = X; t->Left = t->Right = NULL; t->colour = RED; if(X < parent->Data) t = parent->Left; else t = parent->Right; insertAdjust(grandP,parent,t); T->colour = BLACK; return; } } } void insertAdjust(RedBlackNode* gp, RedBlackNode* p, RedBlackNode* t) { if(p->colour == BLACK) return; //代表中间父亲结点为黑色,没有连续的红色结点,无需调整 if(p == Root) { P->colour = BLACK; return; } if(gp->Left == p) { if(p->Left == t) gp = LL(gp); else gp = LR(gp); } else { if(p->Right == t) gp = RR(gp); else gp = RL(gp); } } RedBlackNode* LL(RedBlackNode* gp) { RedBlackNode *p = gp->Left, *t = p->Left; gp->Left = p->Right; p->Right = gp; p->colour = BLACK; gp->colour = RED; return p; } RedBlackNode* RR(RedBlackNode* gp) { RedBlackNode *p = gp->Right, *t = p->Right; gp->Right = p->Left; p->Left = gp; p->colour = BLACK; gp->colour = RED; return p; } RedBlackNode *LR(RedBlackNode* gp) { RedBlackNode *p = gp->Left, *t = gp->Right; /*进行R操作*/ p->Right = t->Left; t->Left = p; gp->Left = t; /*进行L操作*/ gp->Left = t->Right; t->Right = gp; /*更改颜色*/ t->colour = BLACK; gp->colour = RED; return t; } RedBlackNode *RL(RedBlackNode* gp) { RedBlackNode *p = gp->Right, *t = gp->Left; /*进行L操作*/ p->Left = t->Right; t->Right = p; gp->Right = t; /*进行R操作*/ gp->Right = t->Left; t->Left = gp; /*更改颜色*/ t->colour = BLACK; gp->colour = RED; return t; }
  • 相关阅读:
    行业观察(五)| 服装零售企业数字化升级要“落地有数”
    奇点云 x 阿里云 | 联合发布综合体数字化转型与数据创新解决方案
    StartDT_AI_Lab | 开启“数据+算法”定义的新世界
    奇点云数据中台技术汇(六)| 智能算法助力企业效率升级
    从《长安十二时辰》看企业中台战略
    django1.9版本数据库建立
    django中html文件的配置
    python的django建立项目
    python 读取excel表格的数据
    python创建excel表格比并存入数据
  • 原文地址:https://www.cnblogs.com/dzy521/p/9538846.html
Copyright © 2020-2023  润新知