<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      kehuadong

      紅黑樹(shù)

       

       

      #include "common.h"
      
      typedef struct rb_node_t rb_node_t;
      
      struct rb_node_t
      {
          rb_node_t*  m_parent;
          rb_node_t*  m_left;
          rb_node_t*  m_right;
          bool        m_red;
          int         m_value;
      };
      
      rb_node_t* create_node(rb_node_t* parent, int value)
      {
          rb_node_t* p    = (rb_node_t*)calloc(1, sizeof(rb_node_t));
          p->m_parent     = parent;
          p->m_red        = true;
          p->m_value      = value;
          return p;
      }
      
      static void rotate_left(rb_node_t** root, rb_node_t* p)
      {
          rb_node_t* pp   = p->m_parent;
          rb_node_t* r    = p->m_right;
      
          p->m_right = r->m_left;
          r->m_left = p;
          if (pp == NULL)
          {
              *root = r;
          }
          else if (pp->m_left == p)
          {
              pp->m_left = r;
          }
          else
          {
              pp->m_right = r;
          }
      
          if (p->m_right)
          {
              p->m_right->m_parent = p;
          }
          p->m_parent = r;
          r->m_parent = pp;
      }
      
      static void rotate_right(rb_node_t** root, rb_node_t* p)
      {
          rb_node_t* pp   = p->m_parent;
          rb_node_t* l    = p->m_left;
      
          p->m_left = l->m_right;
          l->m_right = p;
          if (pp == NULL)
          {
              *root = l;
          }
          else if (pp->m_left == p)
          {
              pp->m_left = l;
          }
          else
          {
              pp->m_right = l;
          }
          
          if (p->m_left)
          {
              p->m_left->m_parent = p;
          }
          p->m_parent = l;
          l->m_parent = pp;
      }
      
      static void fix_after_insert(rb_node_t** root, rb_node_t* p)
      {
          while (p->m_red)
          {
              rb_node_t* pp = p->m_parent;
              rb_node_t* b = (pp->m_left == p) ? pp->m_right : pp->m_left;
              if (b && b->m_red)
              {
                  p->m_red = false;
                  b->m_red = false;
      
                  if (pp->m_parent)
                  {
                      pp->m_red = true;
                      p = p->m_parent;
                      continue;
                  }
              }
              else
              {
                  if (p == pp->m_left)
                  {
                      if (p->m_right && p->m_right->m_red)
                      {
                          rotate_left(root, p);
                          p = p->m_parent;
                      }
      
                      p->m_red = false;
                      p->m_parent->m_red = true;
                      rotate_right(root, p->m_parent);
                  }
                  else
                  {
                      if (p->m_left && p->m_left->m_red)
                      {
                          rotate_right(root, p);
                          p = p->m_parent;
                      }
      
                      p->m_red = false;
                      p->m_parent->m_red = true;
                      rotate_left(root, p->m_parent);
                  }
              }
              break;
          }
      }
      
      void rb_insert(rb_node_t** root, int value)
      {
          if (*root == NULL)
          {
              *root = create_node(NULL, value);
              (*root)->m_red = false;
              return;
          }
      
          rb_node_t* c = *root;
          rb_node_t* p = NULL;
          while (c)
          {
              p = c;
              if (value <= c->m_value)
              {
                  c = c->m_left;
              }
              else
              {
                  c = c->m_right;
              }
          }
      
          if (value <= p->m_value)
          {
              p->m_left = create_node(p, value);
          }
          else
          {
              p->m_right = create_node(p, value);
          }
      
          fix_after_insert(root, p);
      }
      
      int rb_depth(rb_node_t* p)
      {
          if (p == NULL)
          {
              return 0;
          }
      
          int a = rb_depth(p->m_left);
          int b = rb_depth(p->m_right);
      
          return 1 + (a < b ? b : a);
      }
      
      int rb_count(rb_node_t* p)
      {
          if (p == NULL)
          {
              return 0;
          }
          return 1 + rb_count(p->m_left) + rb_count(p->m_right);
      }
      
      
      int main()
      {
          rb_node_t* root = NULL;
          for (int i = 0; i < 1024*1024; i++)
          {
              rb_insert(&root, i);
          }
          printf("rb_count = %d, rb_depth = %d\n", rb_count(root), rb_depth(root));
      }

       

      posted on 2024-09-03 10:36  kehuadong  閱讀(8)  評(píng)論(0)    收藏  舉報(bào)

      導(dǎo)航

      主站蜘蛛池模板: 欧美老熟妇又粗又大| 视频专区熟女人妻第二页| 亚洲国产精品日韩在线| 亚洲Av综合日韩精品久久久| 最近免费中文字幕大全| 久久精品国产一区二区三| 国产午精品午夜福利757视频播放| 99精品国产一区二区三区2021| 最新精品国偷自产在线美女足 | 黄色国产精品一区二区三区| 日韩精品一区二区三区视频| 国产不卡一区二区在线| 国产成人无码区免费内射一片色欲 | 亚洲色成人网站www永久四虎| 色综合天天综合网天天看片| 国产亚洲精品VA片在线播放| 亚洲韩欧美第25集完整版| 中文字幕va一区二区三区| 久久亚洲精品中文字幕无| 日本亚洲欧洲无免费码在线| 玖玖在线精品免费视频| 老司机亚洲精品一区二区| 亚洲AV无码久久久久网站蜜桃| 中文字幕永久精品国产| 午夜精品区| 久久99久国产精品66| 在线播放深夜精品三级| 人人妻人人澡人人爽| 国产成人精品久久综合| 人妻系列无码专区69影院| 免费看的日韩精品黄色片| 欧美成人精品高清在线播放| 国精品91人妻无码一区二区三区| 国产成人精品久久性色av| 色综合久久久久综合体桃花网| 精品婷婷色一区二区三区| 国产精品一区二区久久毛片| 精品久久人人妻人人做精品| 伊人成人在线视频免费| 国产成人午夜精品永久免费| 性欧美三级在线观看|