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

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

?? 紅黑樹插入程序.cpp

?? 這是兩個紅黑樹程序
?? CPP
字號:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream.h>
#define  LENGTH 100
static int flag = 1;       //是否出現紅--紅沖突的標志
static int flag2 = 0;       //是計數虛擬節點的
static int height=0;         //  記錄黑色高度
static flag3 = 1;
typedef int KEY;
 
enum NODECOLOR
{
    BLACK = 0,
    RED = 1
};

typedef struct RBTree
{
    struct RBTree *parent;
    struct RBTree *left, *right;
    KEY key;
    NODECOLOR color;
}RBTree, *PRBTree;

PRBTree RB_InsertNode(PRBTree root, KEY key);          
PRBTree RB_InsertNode_Fixup(PRBTree root, PRBTree z);

PRBTree RB_DeleteNode(PRBTree root, KEY key);
PRBTree RB_DeleteNode_Fixup(PRBTree root, PRBTree z);

PRBTree Find_Node(PRBTree root, KEY key);
void Left_Rotate(PRBTree A, PRBTree& root);
void Right_Rotate(PRBTree A, PRBTree& root);
void Mid_Visit(PRBTree T);
void Mid_DeleteTree(PRBTree T);
void Print_Node(PRBTree node);


void Left_Rotate(PRBTree A, PRBTree& root)
{ 
    PRBTree B;
    B = A->right;

    if (NULL == B)
        return;

    A->right = B->left;
    if (NULL != B->left)
        B->left->parent = A;
    B->parent = A->parent;
    // 這樣三個判斷連在一起避免了A->parent = NULL的情況

    if (A == root)
    {
        root = B;
    }
    else if (A == A->parent->left)
    {
        A->parent->left = B;
    }
    else
    {
        A->parent->right = B;
    }
    B->left = A;
    A->parent = B;
}


void Right_Rotate(PRBTree A, PRBTree& root)
{
    PRBTree B;
    B = A->left;

    if (NULL == B)
        return;

    A->left = B->right;
    if (NULL != B->right)
        B->right->parent = A;
    B->parent = A->parent;
    // 這樣三個判斷連在一起避免了A->parent = NULL的情況

    if (A == root)
    {
        root = B;
    }
    else if (A == A->parent->left)
    {
        A->parent->left = B;
    }
    else
    {
        A->parent->right = B;
    }
    A->parent = B;
    B->right = A;
}

/**//*-----------------------------------------------------------
  | 函數作用:查找key值對應的結點指針
  | 輸入參數:根節點root,待查找關鍵值key
  | 返回參數:如果找到返回結點指針,否則返回NULL
  -------------------------------------------------------------*/
PRBTree Find_Node(PRBTree root, KEY key)
{
    PRBTree x;

    // 找到key所在的node

    x = root;
    do
    {
        if (key == x->key)
            break;
        if (key < x->key)
        {
            if (NULL != x->left)
                x = x->left;
            else
                break;
        }
        else
        {
            if (NULL != x->right)
                x = x->right;
            else
                break;
        }
    } while (NULL != x);

    return x;
}

/**//*-----------------------------------------------------------
  | 函數作用:在樹中插入key值
  | 輸入參數:根節點root,待插入結點的關鍵值key
  | 返回參數:根節點root
  -------------------------------------------------------------*/
PRBTree RB_InsertNode(PRBTree root, KEY key)
{
    PRBTree x, y;

    PRBTree z;
    if (NULL == (z = (PRBTree)malloc(sizeof(RBTree))))
    {
        printf("Memory alloc error\n");
        return NULL;
    }
    z->key = key;

    // 得到z的父節點

    x = root, y = NULL;
    while (NULL != x)
    {
        y = x;
        if (z->key < x->key)
        {
            if (NULL != x->left)
            {
                x = x->left;
            }
            else
            {
                break;
            }
        }
        else
        {
            if (NULL != x->right)
            {
                x = x->right;
            }
            else
            {
                break;
            }
        }
    }

    // 把z放到合適的位置

    z->parent = y;
    if (NULL == y)
    {
        root = z;
    }
    else
    {
        if (z->key < y->key)
            y->left = z;
        else
            y->right = z;
    }
    // 設置z的左右子樹為空并且顏色是red,注意新插入的節點顏色都是red

    z->left = z->right = NULL;
    z->color = RED;

    // 對紅黑樹進行修正

    return RB_InsertNode_Fixup(root, z);
}

/**//*-----------------------------------------------------------
  | 函數作用:對插入key值之后的樹進行修正
  | 輸入參數:根節點root,插入的結點z
  | 返回參數:根節點root
  -------------------------------------------------------------*/
PRBTree RB_InsertNode_Fixup(PRBTree root, PRBTree z)
{
    PRBTree y;
    while (root != z && RED == z->parent->color) // 當z不是根同時父節點的顏色是red

    {
        if (z->parent == z->parent->parent->left) // 父節點是祖父節點的左子樹

        {
            y = z->parent->parent->right; // y為z的伯父節點

            if (NULL != y && RED == y->color) // 伯父節點存在且顏色是red

            {
                z->parent->color = BLACK; // 更改z的父節點顏色是B

                y->color = BLACK; // 更改z的伯父節點顏色是B

                z->parent->parent->color = RED; // 更改z的祖父節點顏色是B

                z = z->parent->parent; // 更新z為它的祖父節點

            }
            else // 無伯父節點或者伯父節點顏色是b

            {
                if (z == z->parent->right) // 如果新節點是父節點的右子樹

                {
                    z = z->parent;
                    Left_Rotate(z, root);
                }
                z->parent->color = BLACK; // 改變父節點顏色是B

                z->parent->parent->color = RED; // 改變祖父節點顏色是R

                Right_Rotate(z->parent->parent, root);
            }
        }
        else // 父節點為祖父節點的右子樹

        {
            y = z->parent->parent->left; // y為z的伯父節點

            if (NULL != y && RED == y->color) // 如果y的顏色是red

            {
                z->parent->color = BLACK; // 更改父節點的顏色為B

                y->color = BLACK; // 更改伯父節點的顏色是B

                z->parent->parent->color = RED; // 更改祖父節點顏色是R

                z = z->parent->parent; // 更改z指向祖父節點

            } 
            else // y不存在或者顏色是B

            {
                if (z == z->parent->left) // 如果是父節點的左子樹

                {
                    z = z->parent;
                    Right_Rotate(z, root);
                }
                z->parent->color = BLACK; // 改變父節點的顏色是B

                z->parent->parent->color = RED; // 改變祖父節點的顏色是RED

                Left_Rotate(z->parent->parent, root);
            }
        }
    } // while(RED == z->parent->color)


    // 根節點的顏色始終都是B

    root->color = BLACK;

    return root;
}


void Print_Node(PRBTree node)
{
    char* color[] = {"BLACK", "RED"};
    printf("Key = %d,\tcolor = %s", node->key, color[node->color]);
    if (NULL != node->parent)
        printf(",\tparent = %d", node->parent->key);
    if (NULL != node->left)
        printf(",\tleft = %d", node->left->key);
    if (NULL != node->right)
        printf(",\tright = %d", node->right->key);
    printf("\n");
}
  

void BlackHeight(PRBTree T)
{    PRBTree  p =T;  
      int temp;
      flag2++;

      while(p->parent!=NULL)
	  {  p=p->parent;
       if(p->color==BLACK)
         temp++;
	  }

	  if(flag==1)height= temp;
	  if(temp!=height) flag3=0;
}  



void Mid_Visit(PRBTree T)
{   if(T->right==NULL&&T->left==NULL)
          BlackHeight(T);
    if (NULL != T)
    {
        if (NULL != T->left)
		{   if(T->color==RED&&T->left->color==RED)
		    flag = 0;
		Mid_Visit(T->left);} 
        Print_Node(T);
        if (NULL != T->right)
		{if(T->color==RED&&T->right->color==RED)
		    flag = 0;
		Mid_Visit(T->right);}
    }
}


void Create_New_Array(int array[], int length)
{
    for (int i = 0; i < length; i++)
    {
        array[i] = rand() % 1000;
    }
}

int main(int argc, char *argv[])
{
    int array[LENGTH];
    srand(time(NULL));
    Create_New_Array(array, LENGTH);
    PRBTree root = NULL;
    int i;
    for (i = 0; i <LENGTH; i++)
    {
        root = RB_InsertNode(root, array[i]);
    }
   Mid_Visit(root);
   if(flag==0)
	   cout<<"出現了紅--紅沖突"<<endl; //檢驗的三條1:是否有紅-紅沖突2:是否中序遍歷是由小到大3:所有虛擬節點的黑色高度是;一樣的
   else {cout<<"沒有出現紅-紅沖突"<<endl;
         if(flag3==0)
			   cout<<"黑色高度不一樣,不是紅黑樹"<<endl;
		        
		 else cout<<"是紅黑樹"<<endl;  
   } 


   return 0;
}
 

  

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲少妇中出一区| 亚洲男人天堂av网| 欧美一区二区三区四区五区| 色综合久久88色综合天天6| 成人免费看片app下载| 国产不卡免费视频| 成人动漫一区二区三区| 9i在线看片成人免费| 色综合天天狠狠| 欧美日韩国产美女| 日韩三级视频在线看| 国产亚洲综合色| 欧美国产禁国产网站cc| 国产精品理伦片| 亚洲一区二区在线免费观看视频 | 国产曰批免费观看久久久| 美女一区二区视频| 国产精品资源在线观看| 成人激情文学综合网| 在线日韩一区二区| 欧美一级艳片视频免费观看| 国产亚洲欧美激情| 亚洲欧美成aⅴ人在线观看| 亚州成人在线电影| 国产激情一区二区三区四区| 91日韩精品一区| 欧美一区二区视频免费观看| 中日韩免费视频中文字幕| 亚洲美女一区二区三区| 美女一区二区在线观看| av电影在线观看一区| 91精品国产一区二区三区香蕉| 国产日韩一级二级三级| 亚洲成人免费视| 国产成人综合亚洲网站| 欧美性受xxxx黑人xyx性爽| 精品播放一区二区| 一区二区三区蜜桃| 国产成人无遮挡在线视频| 欧美麻豆精品久久久久久| 久久理论电影网| 日韩精品一级中文字幕精品视频免费观看 | 色视频成人在线观看免| 精品国产a毛片| 亚洲午夜免费视频| 成人免费电影视频| 欧美成人性福生活免费看| 亚洲精品中文字幕在线观看| 国产伦精品一区二区三区免费迷| 色婷婷精品大视频在线蜜桃视频| 2021国产精品久久精品| 亚洲综合久久av| 99re8在线精品视频免费播放| 欧美一区二区三区在线看| 一区二区三区精品在线| 不卡的av在线播放| 国产欧美精品一区| 狠狠狠色丁香婷婷综合激情| 欧美日韩一区二区电影| 亚洲色图第一区| 国产不卡一区视频| 久久久久久毛片| 久久99久久99小草精品免视看| 欧美色视频在线观看| 亚洲视频免费在线观看| 国产成人av一区二区三区在线观看| 日韩午夜精品电影| 日韩电影在线免费观看| 在线播放亚洲一区| 亚洲va欧美va国产va天堂影院| 91蝌蚪porny| 一区二区成人在线| 欧洲一区二区三区免费视频| 亚洲精品国产精华液| 99视频精品免费视频| 亚洲国产精品成人综合| 粉嫩一区二区三区性色av| 国产人成一区二区三区影院| 国产精品一区二区久激情瑜伽| 久久久久久久电影| 成人免费观看av| 亚洲欧美日韩国产综合在线| 色视频成人在线观看免| 亚洲成人av在线电影| 7777女厕盗摄久久久| 日本欧美韩国一区三区| 日韩欧美久久一区| 国产一区不卡视频| 中文字幕视频一区二区三区久| 成人精品高清在线| 一区二区在线观看视频在线观看| 欧洲精品在线观看| 免费成人结看片| 欧美国产一区视频在线观看| 色婷婷综合久久久中文字幕| 亚洲aaa精品| 久久精品亚洲乱码伦伦中文| 99久久久久久99| 亚洲午夜电影在线观看| 精品国产一区二区亚洲人成毛片| 成人一区在线观看| 亚洲成在人线在线播放| 久久久久久久网| 91麻豆swag| 精品影视av免费| 一区二区三区四区亚洲| 欧美电影影音先锋| 成人精品免费视频| 日韩不卡一区二区| 国产视频亚洲色图| 欧美日本韩国一区| 成人免费视频caoporn| 亚洲综合视频在线观看| 久久久久久久久久久久久夜| 欧美视频一区二区| 国产不卡视频一区| 美腿丝袜亚洲三区| 亚洲视频一区在线| 久久免费视频一区| 欧美日韩国产一二三| 成人免费观看视频| 国内一区二区在线| 亚洲一区二区三区小说| 国产精品乱码一区二区三区软件| 在线电影国产精品| 色偷偷一区二区三区| 国产成人在线网站| 麻豆精品一区二区三区| 亚洲一卡二卡三卡四卡五卡| 中文字幕在线不卡一区| 久久久影院官网| 欧美成人精精品一区二区频| 欧美综合亚洲图片综合区| www.亚洲激情.com| 国产成都精品91一区二区三| 精品制服美女丁香| 五月婷婷激情综合| 亚洲在线观看免费视频| 亚洲欧洲制服丝袜| 中文字幕中文字幕中文字幕亚洲无线| 精品国免费一区二区三区| 欧美一区二区三区四区高清 | 婷婷中文字幕一区三区| 中文字幕日韩av资源站| 国产精品妹子av| 国产精品视频九色porn| 国产日产精品1区| 久久精品亚洲国产奇米99| 欧美成人精精品一区二区频| 日韩午夜在线观看| 欧美精品一区二区久久婷婷| 精品国产电影一区二区| 久久奇米777| 国产欧美日韩不卡免费| 欧美激情一区在线| 国产精品久久久久aaaa| 亚洲欧美影音先锋| 亚洲精品免费播放| 亚洲va在线va天堂| 捆绑调教一区二区三区| 国产伦精品一区二区三区免费| 国产精品一区二区久久精品爱涩 | 亚洲精品久久久蜜桃| 亚洲免费观看高清在线观看| 亚洲一区二区三区爽爽爽爽爽| 三级成人在线视频| 国产综合久久久久影院| 国产成人精品免费一区二区| 不卡免费追剧大全电视剧网站| 色猫猫国产区一区二在线视频| 欧美色区777第一页| 91精品国产品国语在线不卡| 精品成a人在线观看| 亚洲欧洲韩国日本视频| 五月婷婷综合激情| 国产精品中文字幕日韩精品| 91污在线观看| 欧美电影在线免费观看| 国产亚洲综合色| 一区二区三区鲁丝不卡| 久久国产剧场电影| 91浏览器在线视频| 精品国产免费人成电影在线观看四季| 国产午夜亚洲精品羞羞网站| 一区二区在线观看免费| 狠狠久久亚洲欧美| 色国产综合视频| 久久久青草青青国产亚洲免观| 亚洲精品伦理在线| 久草中文综合在线| 欧美午夜免费电影| 国产日韩欧美精品电影三级在线| 亚洲美女屁股眼交| 韩国三级电影一区二区| 色先锋久久av资源部| 久久久三级国产网站| 日本 国产 欧美色综合| 91网上在线视频| 日本一区二区三区高清不卡| 七七婷婷婷婷精品国产|