亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? red black.txt

?? 計算機算法程序
?? TXT
字號:
#i nclude <stdio.h> 
#i nclude <malloc.h> 

typedef char Key; //定義數據域的類型
typedef struct red_black_node *rbptr;//定義指向結點的指針 
enum nodecolor {red, black}; //結點顏色的枚舉類型 

typedef struct red_black_node //定義結點數據結構
{ 
 Key data; //數據
 rbptr lc; //左指針
 rbptr rc; //右指針
 rbptr p; //父指針
 enum nodecolor color; //顏色
} rbnode; 

static rbnode NIL = {0, NULL, NULL, NULL, black}; //定義一個空結點 

rbptr rb_build_tree (rbptr root,Key a[]);//建立紅黑樹 
rbptr minimum (rbptr x);//查最小結點
rbptr maximum (rbptr x); //查最大結點
rbptr predecessor (rbptr x);//查前序 
rbptr successor (rbptr x); //查中序
rbptr rb_search (rbptr x, Key k); //查找一個關鍵字的指針
rbptr left_rotate (rbptr root, rbptr x); //左旋
rbptr right_rotate (rbptr root, rbptr x);//右旋 
rbptr rb_inserc (rbptr root, rbptr z); //插入結點
rbptr rb_inserc_fixup (rbptr root, rbptr z); //插入后調整
rbptr rb_delete (rbptr root, rbptr z); //刪除結點
rbptr rb_delete_fixup (rbptr root, rbptr z); //刪除后調整
rbptr rb_clear_tree (rbptr root);//清除紅黑樹
void rb_print_node (rbptr p); //打印結點
void rb_pre_visit_tree (rbptr root); //紅黑樹先序遍歷
void rb_mid_visit_tree(rbptr root);//紅黑樹中序遍歷
 
rbptr rb_build_tree (rbptr root,Key a[]) //建立紅黑樹
{ 
 int count = 0; 
 rbptr p; 
 while (a[count]!='\0') { //循環,真至讀完全部數據
  p = (struct red_black_node *)malloc (sizeof (struct red_black_node)); //生成一個空結點
  p->data=a[count]; //將新結點填入數據
  p->lc=&NIL; 
  p->rc=&NIL; 
  p->p=&NIL; 
  p->color=red; 
  root=rb_inserc (root, p); //調用插入函數
  count++; 
  } 
  return root; 
}
 
rbptr minimum (rbptr x)//找最小結點 
{ 
 while (x->lc != &NIL)//只要左孩子不是空結點,繼續查找 
 x = x->lc;//指針指向左孩子 
 return x; 
}
 
rbptr maximum (rbptr x)//找最大結點 
{ 
 while (x->rc != &NIL)//只要右孩子不是空結點,繼續查找
 x = x->rc; //指針指向右孩子
 return x; 
}
 
rbptr successor (rbptr x)//找中序后繼 
 { 
 if (x->rc != &NIL)//若右孩子不是空結點 
 return (minimum (x->rc));//找其最小的一個結點 
 while (x->p!= &NIL && x == x->p->rc) //若X的父結點不為空結點且X是其父的右孩子則繼續循環上溯
  x = x->p; 
 return x; 
 }
 
 rbptr predecessor (rbptr x)//找前序后繼 
 { 
 if (x->lc != &NIL)//若左孩子不是空結點 
 return (maximum (x)); //找其最大的一個結點
 while (x->p != &NIL && x == x->p->lc)//若X的父結點不為空結點且X是其父的左孩子則繼續循環上溯 
  x = x->p; 
 return x; 
 }
 
 rbptr rb_search (rbptr x, Key k)//查找一個關鍵字 
 { 
 while (x != &NIL && x->data != k) //X結點不為空且X的數據域不為K,則繼續循環
  if (x->data < k)//若當前結點比關鍵字小
  x = x->rc; //轉向右孩子
  else 
  x = x->lc;//否則轉向左孩子 
  return x; 
 }
 
 rbptr  left_rotate (rbptr root, rbptr x)//左旋 
 { 
 rbptr r = root; //記下根指針
 rbptr y; 
 y = x->rc;//記下X的右孩子 
 x->rc = y->lc;//把X的右孩子指針指向Y的左孩子。(即原X的右孩子的左孩子) 
 y->lc->p = x; //Y左孩子的父指針指向X
 y->p = x->p; //Y的父指針指向X的父結點
 if (x->p == &NIL) 
 r = y;
 else if (x == x->p->lc) 
   x->p->lc = y; 
   else 
   x->p->rc = y; 
 y->lc = x; 
 x->p = y; 
 return r; 
 } 

 rbptr  right_rotate (rbptr root, rbptr x) //右旋
 { 
 rbptr r = root; 
 rbptr y; 
 y = x->lc; 
 x->lc = y->rc; 
 y->rc->p = x; 
 y->p= x->p; 
 if (x->p == &NIL) 
 r = y; 
 else { 
  if (x->p->lc == x) 
  x->p->lc = y; 
  else 
  x->p->rc = y; 
  } 
 y->rc = x; 
 x->p = y; 
 return r; 
 }
 
 rbptr  rb_inserc (rbptr root, rbptr z)//插入數據 
 { 
 rbptr r = root; 
 rbptr x, y; 
 y = &NIL;//y始終是x的父親指針 
 x = root; 
 while (x != &NIL) {//查找插入位置 
  y = x;//y指向x 
  if (z->data < x-> data) 
   x = x->lc; 
  else 
   x = x->rc;
 } 
 z->p = y; 
 if (y == &NIL)//如果紅黑樹為空 
  r = z; 
 else if (z->data < y->data) 
   y->lc = z; 
   else y->rc = z; 
 z->lc = &NIL; 
 z->rc = &NIL; 
 z->color = red;//插入結點涂紅 
 r = rb_inserc_fixup (r, z); //調整
 return r; 
 } 

 rbptr  rb_inserc_fixup (rbptr root, rbptr z) 
 { 
 rbptr r = root; 
 rbptr y; 
 while (z->p->color == red) { 
  if (z->p == z->p->p->lc) { //情況1 ,Z的父親是z祖父的左孩子 
   y = z->p->p->rc; //Y指向Z的叔叔
   if (y->color == red) {//Y如果是紅  
    z->p->color = black;//把Z的父親涂黑  
    y->color = black;//把Y(即Z的叔叔)也涂黑  
    z->p->p->color = red;//把Y的祖父涂紅  
    z = z->p->p;//Z上溯至其祖父  
    } 
   else {  
    if (z == z->p->rc) { //情況2,Z的父親是z祖父的右孩子 
     z = z->p;//Z指向其父親  
     r = left_rotate (r, z);//左旋,變成情況3  
     } 
    z->p->color = black;//情況3,如果Z的父親為黑 
    z->p->p->color = red;//把Z的祖父涂紅 
    r = right_rotate (r, z->p->p);//右旋 
     } 
    } 
    else if (z->p == z->p->p->rc) { 
     y = z->p->p->lc; 
     if (y->color == red) {//情況4
      z->p->color = black; 
      y->color = black; 
      z->p->p->color = red; 
      z = z->p->p; 
      } 
     else { 
      if (z == z->p->lc) { //情況5 
       z = z->p;  
       r = right_rotate (r, z);  
        } 
      z->p->color = black; //情況6
      z->p->p->color = red;  
      r = left_rotate (r, z->p->p); 
       } 
      } 
     } 
   r->color = black; 
   return r; 
 }
 
 rbptr  rb_delete (rbptr root, rbptr z) 
 { 
 rbptr r = root; 
 rbptr x, y; //y是將被刪除的結點
 if (z->lc == &NIL || z->rc == &NIL)//情況2 
  y = z;//Z至少有一個孩子為空 
 else 
  y = successor (z); //Y是Z的中序后繼,變成情況2
 if (y->lc != &NIL)//Y至多有一個非空的孩子 
  x = y->lc;//若Y有一個非空的孩子,則X指向它,否則X為空 
 else 
  x = y->rc;
  x->p = y->p; 
  if (y == r)//如果Y是根 
  r = x;//X變為根 
  else if (y == y->p->lc) 
  y->p->lc = x; 
    else y->p->rc = x; 
  if (y != z)  z->data= y->data;//情況3,將Y中的內容放到Z中 
 if (y->color == black) 
  r = rb_delete_fixup (r, x); 
  free (y); 
 return r; 
 } 

 rbptr  rb_delete_fixup (rbptr root, rbptr z) 
 { 
 rbptr r = root; 
 rbptr w; 
 while (z != r && z->color == black) { //至多調整到根或碰到一個紅色結點
  if (z == z->p->lc) {
   w = z->p->rc;
   if (w->color == red) { 
    w->color = black; 
    z->p->color = red; 
    r = left_rotate (r, z->p); 
    w = z->p->rc; 
    } 
   else if (w->lc->color == black  && w->rc->color == black) {  
    w->color = red; 
    z = z->p; 
    } 
   else { 
    if (w->rc->color == black) {  
    w->lc->color = black; 
    w->color = red; 
    r = right_rotate (r, w); 
    w = z->p->rc; 
    } 
   w->color = z->p->color;  
   w->rc->color = black; 
   z->p->color = black;
   r = left_rotate (r, z->p); 
   z = r; 
    } 
   } 
  else { 
   w = z->p->lc; 
   if (w->color == red) { 
    w->color = black; 
    z->p->color = red; 
    r = right_rotate (r, z->p); 
    w = z->p->lc; 
    } 
   else if (w->lc->color == black  && w->rc->color == black) { 
     w->color = red; 
     z = z->p; 
     } 
   else { 
    if (w->lc->color == black) { 
     w->color = red; 
     w->rc->color = black; 
     r = left_rotate (r, w); 
     w = z->p->lc; 
     } 
    w->color = z->p->color;
    z->p->color = black; 
    w->lc->color = black; 
    r = right_rotate (r, z->p); 
    z = r; 
    } 
   } 
  } 
 z->color = black; 
 return r; 
 } 

 rbptr  rb_clear_tree (rbptr root)//清除一棵指定的紅黑樹,釋放內存。 
 { 
 if (root != &NIL) { 
  root->lc = rb_clear_tree (root->lc); 
  root->rc = rb_clear_tree (root->rc); 
  free (root); 
  root = &NIL;
  } 
 return root; 
 } 
 
 void  rb_print_node (rbptr p)//打印,每行打印五個結點。 
 { static int i=0;
 if (p != &NIL) 
  if (p->color == red){
   if(i%5==0)printf("\n");
   printf ("[%c (紅色)]\t", p->data);
   }
  else {
   if(i%5==0)printf("\n");
   printf ("[%c (黑色)]\t", p->data); 
   }
 i++;
 }
 
 void  rb_pre_visit_tree (rbptr root)//前序遍歷
 { 
 if (root != &NIL) { 
  rb_print_node (root); 
  rb_pre_visit_tree (root->lc); 
  rb_pre_visit_tree (root->rc); 
  } 
 } 

 void rb_mid_visit_tree(rbptr root)//中序遍歷
 { 
 if (root != &NIL) { 
  rb_mid_visit_tree (root->lc); 
  rb_print_node (root);
  rb_mid_visit_tree (root->rc); 
  } 
 } 
 
 int  main () 
 { 
 char a[11]="acfdbihejg\0";
 rbptr root,p,r;
 root=&NIL;
 root=rb_build_tree(root,a);
 printf("\n\n中序遍歷該紅黑樹(原始):\n");
 rb_mid_visit_tree(root);
 printf("\n\n");
 p=rb_search (root, 'd');
 r=rb_delete (root,p);
 printf("\n\n中序遍歷該紅黑樹(刪除結點d后):\n");
 rb_mid_visit_tree(root);
 printf("\n\n");
 getch(); 

return 0;
 } 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一本一道久久香蕉| 欧美亚洲自拍偷拍| 91在线看国产| 欧美一区二区三区视频免费播放 | 亚洲国产成人在线| 亚洲精品久久7777| 粉嫩av一区二区三区在线播放| 欧美中文字幕一区二区三区 | 中文欧美字幕免费| 日本不卡一区二区三区| 白白色亚洲国产精品| 日韩一区二区三区视频在线观看| 亚洲人吸女人奶水| 国产一区二区三区久久悠悠色av | 91麻豆国产在线观看| 久久伊人蜜桃av一区二区| 亚洲mv大片欧洲mv大片精品| 国产成人亚洲综合a∨猫咪| 欧美大片在线观看一区二区| 国产精品电影一区二区| 国产剧情一区二区| 欧美成人a在线| 亚洲成人三级小说| 欧美图片一区二区三区| 亚洲色图欧洲色图婷婷| 成人精品国产一区二区4080| 精品少妇一区二区| 久久国产精品免费| 精品对白一区国产伦| 麻豆久久一区二区| 日韩女优电影在线观看| 免费在线成人网| 日韩一区二区三区在线观看| 午夜精品久久久久久久99水蜜桃| 欧美自拍丝袜亚洲| 亚洲国产毛片aaaaa无费看| 欧美在线不卡视频| 午夜国产精品影院在线观看| 欧美人与禽zozo性伦| 亚洲成人av电影在线| 欧美裸体一区二区三区| 青青草国产成人av片免费| 91精品欧美久久久久久动漫| 奇米精品一区二区三区在线观看 | 亚洲成人免费av| 欧美男生操女生| 美女脱光内衣内裤视频久久影院| 日韩欧美久久久| 国产原创一区二区| 国产精品大尺度| 欧美亚日韩国产aⅴ精品中极品| 亚洲国产乱码最新视频 | 91亚洲国产成人精品一区二区三 | 亚洲综合另类小说| 欧美人妖巨大在线| 久久99精品一区二区三区| 日韩欧美在线综合网| 国产一区二区看久久| 国产精品美女久久久久aⅴ| 91蜜桃在线免费视频| 视频一区二区中文字幕| 久久影院午夜片一区| 91小宝寻花一区二区三区| 亚洲国产精品久久久男人的天堂| 337p亚洲精品色噜噜噜| 国产成人综合亚洲网站| 亚洲黄色av一区| 精品三级av在线| 91在线观看视频| 免费看日韩精品| 中文字幕一区二区三区在线不卡| 欧美日韩免费观看一区三区| 国产一区二区女| 午夜精品视频在线观看| 国产精品美女久久久久久久| 欧美三级电影一区| 国产精品一区二区在线播放| 亚洲综合在线观看视频| 久久久99免费| 欧美日韩一区高清| 成人一区二区三区| 久久99在线观看| 一区二区欧美在线观看| 国产欧美日韩综合| 欧美日韩国产精品自在自线| 成人一区二区视频| 麻豆成人久久精品二区三区小说| 亚洲人午夜精品天堂一二香蕉| 日韩欧美卡一卡二| 欧美日韩亚洲综合一区| 成人黄色777网| 国内精品久久久久影院一蜜桃| 亚洲综合偷拍欧美一区色| 中文字幕免费在线观看视频一区| 91精品国产全国免费观看| 在线观看日韩电影| 成人h动漫精品一区二区| 国产精品123区| 日韩精品亚洲专区| 亚洲成人在线观看视频| 亚洲欧美色一区| 国产精品国产三级国产a| 欧美精品一区二区在线播放| 欧美日韩一区二区三区四区五区| 成人高清视频在线| 国产精品白丝jk白祙喷水网站 | 精品污污网站免费看| 成人小视频在线观看| 国产一区二区视频在线播放| 久久精品国产999大香线蕉| 天堂在线亚洲视频| 午夜精品久久久久久久| 午夜成人免费电影| 亚洲大片精品永久免费| 亚洲五月六月丁香激情| 亚洲午夜影视影院在线观看| 亚洲伦在线观看| 一区二区在线看| 一区二区三区在线影院| 亚洲与欧洲av电影| 婷婷久久综合九色综合伊人色| 亚洲福利视频一区二区| 亚洲电影一级黄| 午夜伊人狠狠久久| 捆绑调教一区二区三区| 久久精品国产一区二区三| 久久精品久久精品| 国产成人福利片| 91在线云播放| 欧美熟乱第一页| 69堂精品视频| 久久精品免费在线观看| 国产精品久久久久影院| 亚洲一区二区成人在线观看| 丝袜美腿亚洲一区| 国产在线不卡视频| 99天天综合性| 884aa四虎影成人精品一区| 日韩一级大片在线| 国产精品免费网站在线观看| 亚洲欧美经典视频| 水野朝阳av一区二区三区| 狠狠色伊人亚洲综合成人| 国v精品久久久网| 欧美亚洲免费在线一区| 精品久久久久久久久久久久久久久久久| 精品国产乱码久久久久久1区2区| 久久免费午夜影院| 亚洲人成影院在线观看| 日本成人在线电影网| 东方欧美亚洲色图在线| 欧美日韩中文字幕一区二区| 欧美大尺度电影在线| 日韩理论片一区二区| 日产国产高清一区二区三区 | 国产色产综合色产在线视频| 亚洲少妇最新在线视频| 美女网站在线免费欧美精品| 成人a免费在线看| 日韩一区二区精品在线观看| 国产精品久久网站| 日本最新不卡在线| 97久久人人超碰| 久久综合久久鬼色| 亚洲18色成人| 91影院在线免费观看| 精品盗摄一区二区三区| 一区二区三区欧美日韩| 激情文学综合插| 欧美日韩亚洲综合一区二区三区| 国产日韩欧美一区二区三区乱码| 亚洲综合久久久| 成人免费视频视频| 欧美sm极限捆绑bd| 午夜精品123| 91丝袜美女网| 国产亚洲人成网站| 免费在线观看一区| 欧美区一区二区三区| 自拍偷拍亚洲欧美日韩| 国产乱妇无码大片在线观看| 在线播放视频一区| 一区二区三区日韩| 99久久夜色精品国产网站| 精品国产123| 久久精品国产久精国产| 欧美日韩一区高清| 亚洲国产一二三| 在线观看国产精品网站| 亚洲色图都市小说| aaa亚洲精品一二三区| 国产视频亚洲色图| 国产a区久久久| 久久久亚洲精华液精华液精华液| 日本人妖一区二区| 欧美一级二级在线观看| 日本va欧美va精品| 欧美v日韩v国产v| 国产一区二区视频在线播放| 久久综合给合久久狠狠狠97色69|