日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

红黑树(三)之 C++的实现

發(fā)布時(shí)間:2025/3/20 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 红黑树(三)之 C++的实现 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

概要

前面分別介紹紅黑樹的理論知識(shí)紅黑樹的C語(yǔ)言實(shí)現(xiàn)。本章是紅黑樹的C++實(shí)現(xiàn),若讀者對(duì)紅黑樹的理論知識(shí)不熟悉,建立先學(xué)習(xí)紅黑樹的理論知識(shí),再來(lái)學(xué)習(xí)本章。

目錄
1.?紅黑樹的介紹
2. 紅黑樹的C++實(shí)現(xiàn)(代碼說(shuō)明)
3. 紅黑樹的C++實(shí)現(xiàn)(完整源碼)
4. 紅黑樹的C++測(cè)試程序

轉(zhuǎn)載請(qǐng)注明出處:http://www.cnblogs.com/skywang12345/p/3624291.html


更多內(nèi)容:數(shù)據(jù)結(jié)構(gòu)與算法系列 目錄

(01)?紅黑樹(一)之 原理和算法詳細(xì)介紹
(02)?紅黑樹(二)之 C語(yǔ)言的實(shí)現(xiàn)
(03)?紅黑樹(三)之 C++的實(shí)現(xiàn)?

?

紅黑樹的介紹

紅黑樹(Red-Black Tree,簡(jiǎn)稱R-B Tree),它一種特殊的二叉查找樹。
紅黑樹是特殊的二叉查找樹,意味著它滿足二叉查找樹的特征:任意一個(gè)節(jié)點(diǎn)所包含的鍵值,大于等于左孩子的鍵值,小于等于右孩子的鍵值。
除了具備該特性之外,紅黑樹還包括許多額外的信息。

紅黑樹的每個(gè)節(jié)點(diǎn)上都有存儲(chǔ)位表示節(jié)點(diǎn)的顏色,顏色是紅(Red)或黑(Black)。
紅黑樹的特性:
(1) 每個(gè)節(jié)點(diǎn)或者是黑色,或者是紅色。
(2) 根節(jié)點(diǎn)是黑色。
(3) 每個(gè)葉子節(jié)點(diǎn)是黑色。 [注意:這里葉子節(jié)點(diǎn),是指為空的葉子節(jié)點(diǎn)!]
(4) 如果一個(gè)節(jié)點(diǎn)是紅色的,則它的子節(jié)點(diǎn)必須是黑色的。
(5) 從一個(gè)節(jié)點(diǎn)到該節(jié)點(diǎn)的子孫節(jié)點(diǎn)的所有路徑上包含相同數(shù)目的黑節(jié)點(diǎn)。

關(guān)于它的特性,需要注意的是:
第一,特性(3)中的葉子節(jié)點(diǎn),是只為空(NIL或null)的節(jié)點(diǎn)。
第二,特性(5),確保沒(méi)有一條路徑會(huì)比其他路徑長(zhǎng)出倆倍。因而,紅黑樹是相對(duì)是接近平衡的二叉樹。

紅黑樹示意圖如下:

?

紅黑樹的C++實(shí)現(xiàn)(代碼說(shuō)明)

紅黑樹的基本操作是添加刪除旋轉(zhuǎn)。在對(duì)紅黑樹進(jìn)行添加或刪除后,會(huì)用到旋轉(zhuǎn)方法。為什么呢?道理很簡(jiǎn)單,添加或刪除紅黑樹中的節(jié)點(diǎn)之后,紅黑樹就發(fā)生了變化,可能不滿足紅黑樹的5條性質(zhì),也就不再是一顆紅黑樹了,而是一顆普通的樹。而通過(guò)旋轉(zhuǎn),可以使這顆樹重新成為紅黑樹。簡(jiǎn)單點(diǎn)說(shuō),旋轉(zhuǎn)的目的是讓樹保持紅黑樹的特性。
旋轉(zhuǎn)包括兩種:左旋 和 右旋。下面分別對(duì)紅黑樹的基本操作進(jìn)行介紹。

?

1. 基本定義

enum RBTColor{RED, BLACK};template <class T> class RBTNode{public:RBTColor color; // 顏色T key; // 關(guān)鍵字(鍵值)RBTNode *left; // 左孩子RBTNode *right; // 右孩子RBTNode *parent; // 父結(jié)點(diǎn) RBTNode(T value, RBTColor c, RBTNode *p, RBTNode *l, RBTNode *r):key(value),color(c),parent(),left(l),right(r) {} };template <class T> class RBTree {private:RBTNode<T> *mRoot; // 根結(jié)點(diǎn)public:RBTree();~RBTree();// 前序遍歷"紅黑樹"void preOrder();// 中序遍歷"紅黑樹"void inOrder();// 后序遍歷"紅黑樹"void postOrder();// (遞歸實(shí)現(xiàn))查找"紅黑樹"中鍵值為key的節(jié)點(diǎn)RBTNode<T>* search(T key);// (非遞歸實(shí)現(xiàn))查找"紅黑樹"中鍵值為key的節(jié)點(diǎn)RBTNode<T>* iterativeSearch(T key);// 查找最小結(jié)點(diǎn):返回最小結(jié)點(diǎn)的鍵值。 T minimum();// 查找最大結(jié)點(diǎn):返回最大結(jié)點(diǎn)的鍵值。 T maximum();// 找結(jié)點(diǎn)(x)的后繼結(jié)點(diǎn)。即,查找"紅黑樹中數(shù)據(jù)值大于該結(jié)點(diǎn)"的"最小結(jié)點(diǎn)"。RBTNode<T>* successor(RBTNode<T> *x);// 找結(jié)點(diǎn)(x)的前驅(qū)結(jié)點(diǎn)。即,查找"紅黑樹中數(shù)據(jù)值小于該結(jié)點(diǎn)"的"最大結(jié)點(diǎn)"。RBTNode<T>* predecessor(RBTNode<T> *x);// 將結(jié)點(diǎn)(key為節(jié)點(diǎn)鍵值)插入到紅黑樹中void insert(T key);// 刪除結(jié)點(diǎn)(key為節(jié)點(diǎn)鍵值)void remove(T key);// 銷毀紅黑樹void destroy();// 打印紅黑樹void print();private:// 前序遍歷"紅黑樹"void preOrder(RBTNode<T>* tree) const;// 中序遍歷"紅黑樹"void inOrder(RBTNode<T>* tree) const;// 后序遍歷"紅黑樹"void postOrder(RBTNode<T>* tree) const;// (遞歸實(shí)現(xiàn))查找"紅黑樹x"中鍵值為key的節(jié)點(diǎn)RBTNode<T>* search(RBTNode<T>* x, T key) const;// (非遞歸實(shí)現(xiàn))查找"紅黑樹x"中鍵值為key的節(jié)點(diǎn)RBTNode<T>* iterativeSearch(RBTNode<T>* x, T key) const;// 查找最小結(jié)點(diǎn):返回tree為根結(jié)點(diǎn)的紅黑樹的最小結(jié)點(diǎn)。RBTNode<T>* minimum(RBTNode<T>* tree);// 查找最大結(jié)點(diǎn):返回tree為根結(jié)點(diǎn)的紅黑樹的最大結(jié)點(diǎn)。RBTNode<T>* maximum(RBTNode<T>* tree);// 左旋void leftRotate(RBTNode<T>* &root, RBTNode<T>* x);// 右旋void rightRotate(RBTNode<T>* &root, RBTNode<T>* y);// 插入函數(shù)void insert(RBTNode<T>* &root, RBTNode<T>* node);// 插入修正函數(shù)void insertFixUp(RBTNode<T>* &root, RBTNode<T>* node);// 刪除函數(shù)void remove(RBTNode<T>* &root, RBTNode<T> *node);// 刪除修正函數(shù)void removeFixUp(RBTNode<T>* &root, RBTNode<T> *node, RBTNode<T> *parent);// 銷毀紅黑樹void destroy(RBTNode<T>* &tree);// 打印紅黑樹void print(RBTNode<T>* tree, T key, int direction);#define rb_parent(r) ((r)->parent) #define rb_color(r) ((r)->color) #define rb_is_red(r) ((r)->color==RED) #define rb_is_black(r) ((r)->color==BLACK) #define rb_set_black(r) do { (r)->color = BLACK; } while (0) #define rb_set_red(r) do { (r)->color = RED; } while (0) #define rb_set_parent(r,p) do { (r)->parent = (p); } while (0) #define rb_set_color(r,c) do { (r)->color = (c); } while (0) };

RBTNode是紅黑樹的節(jié)點(diǎn)類,而RBTree對(duì)應(yīng)是紅黑樹的操作實(shí)現(xiàn)類。在RBTree中包含了根節(jié)點(diǎn)mRoot和紅黑樹的相關(guān)API。
注意:(01) 在實(shí)現(xiàn)紅黑樹API的過(guò)程中,我重載了許多函數(shù)。重載的原因,一是因?yàn)橛械腁PI是內(nèi)部接口,有的是外部接口;二是為了讓結(jié)構(gòu)更加清晰。
? ? ? ? ? (02) 由于C++的實(shí)現(xiàn)是在上一篇介紹的"C語(yǔ)言"實(shí)現(xiàn)基礎(chǔ)上移植而來(lái),在該代碼中,保留了一些C語(yǔ)言的特性;例如(宏定義)。

?

2. 左旋

對(duì)x進(jìn)行左旋,意味著"將x變成一個(gè)左節(jié)點(diǎn)"。

?

左旋的實(shí)現(xiàn)代碼(C++語(yǔ)言)

/* * 對(duì)紅黑樹的節(jié)點(diǎn)(x)進(jìn)行左旋轉(zhuǎn)** 左旋示意圖(對(duì)節(jié)點(diǎn)x進(jìn)行左旋):* px px* / /* x y * / \ --(左旋)--> / \ #* lx y x ry * / \ / \* ly ry lx ly ***/ template <class T> void RBTree<T>::leftRotate(RBTNode<T>* &root, RBTNode<T>* x) {// 設(shè)置x的右孩子為yRBTNode<T> *y = x->right;// 將 “y的左孩子” 設(shè)為 “x的右孩子”;// 如果y的左孩子非空,將 “x” 設(shè)為 “y的左孩子的父親”x->right = y->left;if (y->left != NULL)y->left->parent = x;// 將 “x的父親” 設(shè)為 “y的父親”y->parent = x->parent;if (x->parent == NULL){root = y; // 如果 “x的父親” 是空節(jié)點(diǎn),則將y設(shè)為根節(jié)點(diǎn) }else{if (x->parent->left == x)x->parent->left = y; // 如果 x是它父節(jié)點(diǎn)的左孩子,則將y設(shè)為“x的父節(jié)點(diǎn)的左孩子”elsex->parent->right = y; // 如果 x是它父節(jié)點(diǎn)的左孩子,則將y設(shè)為“x的父節(jié)點(diǎn)的左孩子” }// 將 “x” 設(shè)為 “y的左孩子”y->left = x;// 將 “x的父節(jié)點(diǎn)” 設(shè)為 “y”x->parent = y; }

?

3. 右旋

對(duì)y進(jìn)行左旋,意味著"將y變成一個(gè)右節(jié)點(diǎn)"。

?

右旋的實(shí)現(xiàn)代碼(C++語(yǔ)言)

/* * 對(duì)紅黑樹的節(jié)點(diǎn)(y)進(jìn)行右旋轉(zhuǎn)** 右旋示意圖(對(duì)節(jié)點(diǎn)y進(jìn)行左旋):* py py* / /* y x * / \ --(右旋)--> / \ #* x ry lx y * / \ / \ #* lx rx rx ry* */ template <class T> void RBTree<T>::rightRotate(RBTNode<T>* &root, RBTNode<T>* y) {// 設(shè)置x是當(dāng)前節(jié)點(diǎn)的左孩子。RBTNode<T> *x = y->left;// 將 “x的右孩子” 設(shè)為 “y的左孩子”;// 如果"x的右孩子"不為空的話,將 “y” 設(shè)為 “x的右孩子的父親”y->left = x->right;if (x->right != NULL)x->right->parent = y;// 將 “y的父親” 設(shè)為 “x的父親”x->parent = y->parent;if (y->parent == NULL) {root = x; // 如果 “y的父親” 是空節(jié)點(diǎn),則將x設(shè)為根節(jié)點(diǎn) }else{if (y == y->parent->right)y->parent->right = x; // 如果 y是它父節(jié)點(diǎn)的右孩子,則將x設(shè)為“y的父節(jié)點(diǎn)的右孩子”elsey->parent->left = x; // (y是它父節(jié)點(diǎn)的左孩子) 將x設(shè)為“x的父節(jié)點(diǎn)的左孩子” }// 將 “y” 設(shè)為 “x的右孩子”x->right = y;// 將 “y的父節(jié)點(diǎn)” 設(shè)為 “x”y->parent = x; }

?

4. 添加

將一個(gè)節(jié)點(diǎn)插入到紅黑樹中,需要執(zhí)行哪些步驟呢?首先,將紅黑樹當(dāng)作一顆二叉查找樹,將節(jié)點(diǎn)插入;然后,將節(jié)點(diǎn)著色為紅色;最后,通過(guò)"旋轉(zhuǎn)和重新著色"等一系列操作來(lái)修正該樹,使之重新成為一顆紅黑樹。詳細(xì)描述如下:
第一步: 將紅黑樹當(dāng)作一顆二叉查找樹,將節(jié)點(diǎn)插入。
? ? ? ?紅黑樹本身就是一顆二叉查找樹,將節(jié)點(diǎn)插入后,該樹仍然是一顆二叉查找樹。也就意味著,樹的鍵值仍然是有序的。此外,無(wú)論是左旋還是右旋,若旋轉(zhuǎn)之前這棵樹是二叉查找樹,旋轉(zhuǎn)之后它一定還是二叉查找樹。這也就意味著,任何的旋轉(zhuǎn)和重新著色操作,都不會(huì)改變它仍然是一顆二叉查找樹的事實(shí)。
? ? ? 好吧?那接下來(lái),我們就來(lái)想方設(shè)法的旋轉(zhuǎn)以及重新著色,使這顆樹重新成為紅黑樹!

第二步:將插入的節(jié)點(diǎn)著色為"紅色"。
? ? ? 為什么著色成紅色,而不是黑色呢?為什么呢?在回答之前,我們需要重新溫習(xí)一下紅黑樹的特性:
(1) 每個(gè)節(jié)點(diǎn)或者是黑色,或者是紅色。
(2) 根節(jié)點(diǎn)是黑色。
(3) 每個(gè)葉子節(jié)點(diǎn)是黑色。 [注意:這里葉子節(jié)點(diǎn),是指為空的葉子節(jié)點(diǎn)!]
(4) 如果一個(gè)節(jié)點(diǎn)是紅色的,則它的子節(jié)點(diǎn)必須是黑色的。
(5) 從一個(gè)節(jié)點(diǎn)到該節(jié)點(diǎn)的子孫節(jié)點(diǎn)的所有路徑上包含相同數(shù)目的黑節(jié)點(diǎn)。
? ? 將插入的節(jié)點(diǎn)著色為紅色,不會(huì)違背"特性(5)"!少違背一條特性,就意味著我們需要處理的情況越少。接下來(lái),就要努力的讓這棵樹滿足其它性質(zhì)即可;滿足了的話,它就又是一顆紅黑樹了。o(∩∩)o...哈哈

第三步: 通過(guò)一系列的旋轉(zhuǎn)或著色等操作,使之重新成為一顆紅黑樹。
? ? ? ?第二步中,將插入節(jié)點(diǎn)著色為"紅色"之后,不會(huì)違背"特性(5)"。那它到底會(huì)違背哪些特性呢?
? ? ? ?對(duì)于"特性(1)",顯然不會(huì)違背了。因?yàn)槲覀円呀?jīng)將它涂成紅色了。
? ? ? ?對(duì)于"特性(2)",顯然也不會(huì)違背。在第一步中,我們是將紅黑樹當(dāng)作二叉查找樹,然后執(zhí)行的插入操作。而根據(jù)二叉查找數(shù)的特點(diǎn),插入操作不會(huì)改變根節(jié)點(diǎn)。所以,根節(jié)點(diǎn)仍然是黑色。
? ? ? ?對(duì)于"特性(3)",顯然不會(huì)違背了。這里的葉子節(jié)點(diǎn)是指的空葉子節(jié)點(diǎn),插入非空節(jié)點(diǎn)并不會(huì)對(duì)它們?cè)斐捎绊憽?/span>
? ? ? ?對(duì)于"特性(4)",是有可能違背的!
? ? ? 那接下來(lái),想辦法使之"滿足特性(4)",就可以將樹重新構(gòu)造成紅黑樹了。


添加操作的實(shí)現(xiàn)代碼(C++語(yǔ)言)

/* * 將結(jié)點(diǎn)插入到紅黑樹中** 參數(shù)說(shuō)明:* root 紅黑樹的根結(jié)點(diǎn)* node 插入的結(jié)點(diǎn) // 對(duì)應(yīng)《算法導(dǎo)論》中的node*/ template <class T> void RBTree<T>::insert(RBTNode<T>* &root, RBTNode<T>* node) {RBTNode<T> *y = NULL;RBTNode<T> *x = root;// 1. 將紅黑樹當(dāng)作一顆二叉查找樹,將節(jié)點(diǎn)添加到二叉查找樹中。while (x != NULL){y = x;if (node->key < x->key)x = x->left;elsex = x->right;}node->parent = y;if (y!=NULL){if (node->key < y->key)y->left = node;elsey->right = node;}elseroot = node;// 2. 設(shè)置節(jié)點(diǎn)的顏色為紅色node->color = RED;// 3. 將它重新修正為一顆二叉查找樹 insertFixUp(root, node); }/* * 將結(jié)點(diǎn)(key為節(jié)點(diǎn)鍵值)插入到紅黑樹中** 參數(shù)說(shuō)明:* tree 紅黑樹的根結(jié)點(diǎn)* key 插入結(jié)點(diǎn)的鍵值*/ template <class T> void RBTree<T>::insert(T key) {RBTNode<T> *z=NULL;// 如果新建結(jié)點(diǎn)失敗,則返回。if ((z=new RBTNode<T>(key,BLACK,NULL,NULL,NULL)) == NULL)return ;insert(mRoot, z); }

內(nèi)部接口?-- insert(root, node)的作用是將"node"節(jié)點(diǎn)插入到紅黑樹中。其中,root是根,node是被插入節(jié)點(diǎn)。
外部接口?-- insert(key)的作用是將"key"添加到紅黑樹中。


添加修正操作的實(shí)現(xiàn)代碼(C++語(yǔ)言)

/** 紅黑樹插入修正函數(shù)** 在向紅黑樹中插入節(jié)點(diǎn)之后(失去平衡),再調(diào)用該函數(shù);* 目的是將它重新塑造成一顆紅黑樹。** 參數(shù)說(shuō)明:* root 紅黑樹的根* node 插入的結(jié)點(diǎn) // 對(duì)應(yīng)《算法導(dǎo)論》中的z*/ template <class T> void RBTree<T>::insertFixUp(RBTNode<T>* &root, RBTNode<T>* node) {RBTNode<T> *parent, *gparent;// 若“父節(jié)點(diǎn)存在,并且父節(jié)點(diǎn)的顏色是紅色”while ((parent = rb_parent(node)) && rb_is_red(parent)){gparent = rb_parent(parent);//若“父節(jié)點(diǎn)”是“祖父節(jié)點(diǎn)的左孩子”if (parent == gparent->left){// Case 1條件:叔叔節(jié)點(diǎn)是紅色 {RBTNode<T> *uncle = gparent->right;if (uncle && rb_is_red(uncle)){rb_set_black(uncle);rb_set_black(parent);rb_set_red(gparent);node = gparent;continue;}}// Case 2條件:叔叔是黑色,且當(dāng)前節(jié)點(diǎn)是右孩子if (parent->right == node){RBTNode<T> *tmp;leftRotate(root, parent);tmp = parent;parent = node;node = tmp;}// Case 3條件:叔叔是黑色,且當(dāng)前節(jié)點(diǎn)是左孩子。 rb_set_black(parent);rb_set_red(gparent);rightRotate(root, gparent);} else//若“z的父節(jié)點(diǎn)”是“z的祖父節(jié)點(diǎn)的右孩子” {// Case 1條件:叔叔節(jié)點(diǎn)是紅色 {RBTNode<T> *uncle = gparent->left;if (uncle && rb_is_red(uncle)){rb_set_black(uncle);rb_set_black(parent);rb_set_red(gparent);node = gparent;continue;}}// Case 2條件:叔叔是黑色,且當(dāng)前節(jié)點(diǎn)是左孩子if (parent->left == node){RBTNode<T> *tmp;rightRotate(root, parent);tmp = parent;parent = node;node = tmp;}// Case 3條件:叔叔是黑色,且當(dāng)前節(jié)點(diǎn)是右孩子。 rb_set_black(parent);rb_set_red(gparent);leftRotate(root, gparent);}}// 將根節(jié)點(diǎn)設(shè)為黑色 rb_set_black(root); }

insertFixUp(root, node)的作用是對(duì)應(yīng)"上面所講的第三步"。它是一個(gè)內(nèi)部接口。

?

5. 刪除操作

將紅黑樹內(nèi)的某一個(gè)節(jié)點(diǎn)刪除。需要執(zhí)行的操作依次是:首先,將紅黑樹當(dāng)作一顆二叉查找樹,將該節(jié)點(diǎn)從二叉查找樹中刪除;然后,通過(guò)"旋轉(zhuǎn)和重新著色"等一系列來(lái)修正該樹,使之重新成為一棵紅黑樹。詳細(xì)描述如下:

第一步:將紅黑樹當(dāng)作一顆二叉查找樹,將節(jié)點(diǎn)刪除。
? ? ? 這和"刪除常規(guī)二叉查找樹中刪除節(jié)點(diǎn)的方法是一樣的"。分3種情況:
① 被刪除節(jié)點(diǎn)沒(méi)有兒子,即為葉節(jié)點(diǎn)。那么,直接將該節(jié)點(diǎn)刪除就OK了。
② 被刪除節(jié)點(diǎn)只有一個(gè)兒子。那么,直接刪除該節(jié)點(diǎn),并用該節(jié)點(diǎn)的唯一子節(jié)點(diǎn)頂替它的位置。
③ 被刪除節(jié)點(diǎn)有兩個(gè)兒子。那么,先找出它的后繼節(jié)點(diǎn);然后把“它的后繼節(jié)點(diǎn)的內(nèi)容”復(fù)制給“該節(jié)點(diǎn)的內(nèi)容”;之后,刪除“它的后繼節(jié)點(diǎn)”。在這里,后繼節(jié)點(diǎn)相當(dāng)于替身,在將后繼節(jié)點(diǎn)的內(nèi)容復(fù)制給"被刪除節(jié)點(diǎn)"之后,再將后繼節(jié)點(diǎn)刪除。這樣就巧妙的將問(wèn)題轉(zhuǎn)換為"刪除后繼節(jié)點(diǎn)"的情況了,下面就考慮后繼節(jié)點(diǎn)。 在"被刪除節(jié)點(diǎn)"有兩個(gè)非空子節(jié)點(diǎn)的情況下,它的后繼節(jié)點(diǎn)不可能是雙子非空。既然"的后繼節(jié)點(diǎn)"不可能雙子都非空,就意味著"該節(jié)點(diǎn)的后繼節(jié)點(diǎn)"要么沒(méi)有兒子,要么只有一個(gè)兒子。若沒(méi)有兒子,則按"情況① "進(jìn)行處理;若只有一個(gè)兒子,則按"情況② "進(jìn)行處理。

第二步:通過(guò)"旋轉(zhuǎn)和重新著色"等一系列來(lái)修正該樹,使之重新成為一棵紅黑樹。
? ? ? ?因?yàn)?#34;第一步"中刪除節(jié)點(diǎn)之后,可能會(huì)違背紅黑樹的特性。所以需要通過(guò)"旋轉(zhuǎn)和重新著色"來(lái)修正該樹,使之重新成為一棵紅黑樹。


刪除操作的實(shí)現(xiàn)代碼(C++語(yǔ)言)

/* * 刪除結(jié)點(diǎn)(node),并返回被刪除的結(jié)點(diǎn)** 參數(shù)說(shuō)明:* root 紅黑樹的根結(jié)點(diǎn)* node 刪除的結(jié)點(diǎn)*/ template <class T> void RBTree<T>::remove(RBTNode<T>* &root, RBTNode<T> *node) {RBTNode<T> *child, *parent;RBTColor color;// 被刪除節(jié)點(diǎn)的"左右孩子都不為空"的情況。if ( (node->left!=NULL) && (node->right!=NULL) ) {// 被刪節(jié)點(diǎn)的后繼節(jié)點(diǎn)。(稱為"取代節(jié)點(diǎn)")// 用它來(lái)取代"被刪節(jié)點(diǎn)"的位置,然后再將"被刪節(jié)點(diǎn)"去掉。RBTNode<T> *replace = node;// 獲取后繼節(jié)點(diǎn)replace = replace->right;while (replace->left != NULL)replace = replace->left;// "node節(jié)點(diǎn)"不是根節(jié)點(diǎn)(只有根節(jié)點(diǎn)不存在父節(jié)點(diǎn))if (rb_parent(node)){if (rb_parent(node)->left == node)rb_parent(node)->left = replace;elserb_parent(node)->right = replace;} else // "node節(jié)點(diǎn)"是根節(jié)點(diǎn),更新根節(jié)點(diǎn)。root = replace;// child是"取代節(jié)點(diǎn)"的右孩子,也是需要"調(diào)整的節(jié)點(diǎn)"。// "取代節(jié)點(diǎn)"肯定不存在左孩子!因?yàn)樗且粋€(gè)后繼節(jié)點(diǎn)。child = replace->right;parent = rb_parent(replace);// 保存"取代節(jié)點(diǎn)"的顏色color = rb_color(replace);// "被刪除節(jié)點(diǎn)"是"它的后繼節(jié)點(diǎn)的父節(jié)點(diǎn)"if (parent == node){parent = replace;} else{// child不為空if (child)rb_set_parent(child, parent);parent->left = child;replace->right = node->right;rb_set_parent(node->right, replace);}replace->parent = node->parent;replace->color = node->color;replace->left = node->left;node->left->parent = replace;if (color == BLACK)removeFixUp(root, child, parent);delete node;return ;}if (node->left !=NULL)child = node->left;else child = node->right;parent = node->parent;// 保存"取代節(jié)點(diǎn)"的顏色color = node->color;if (child)child->parent = parent;// "node節(jié)點(diǎn)"不是根節(jié)點(diǎn)if (parent){if (parent->left == node)parent->left = child;elseparent->right = child;}elseroot = child;if (color == BLACK)removeFixUp(root, child, parent);delete node; }/* * 刪除紅黑樹中鍵值為key的節(jié)點(diǎn)** 參數(shù)說(shuō)明:* tree 紅黑樹的根結(jié)點(diǎn)*/ template <class T> void RBTree<T>::remove(T key) {RBTNode<T> *node; // 查找key對(duì)應(yīng)的節(jié)點(diǎn)(node),找到的話就刪除該節(jié)點(diǎn)if ((node = search(mRoot, key)) != NULL)remove(mRoot, node); }

內(nèi)部接口?-- remove(root, node)的作用是將"node"節(jié)點(diǎn)插入到紅黑樹中。其中,root是根,node是被插入節(jié)點(diǎn)。
外部接口?-- remove(key)刪除紅黑樹中鍵值為key的節(jié)點(diǎn)。


刪除修正操作的實(shí)現(xiàn)代碼(C++語(yǔ)言)

/** 紅黑樹刪除修正函數(shù)** 在從紅黑樹中刪除插入節(jié)點(diǎn)之后(紅黑樹失去平衡),再調(diào)用該函數(shù);* 目的是將它重新塑造成一顆紅黑樹。** 參數(shù)說(shuō)明:* root 紅黑樹的根* node 待修正的節(jié)點(diǎn)*/ template <class T> void RBTree<T>::removeFixUp(RBTNode<T>* &root, RBTNode<T> *node, RBTNode<T> *parent) {RBTNode<T> *other;while ((!node || rb_is_black(node)) && node != root){if (parent->left == node){other = parent->right;if (rb_is_red(other)){// Case 1: x的兄弟w是紅色的 rb_set_black(other);rb_set_red(parent);leftRotate(root, parent);other = parent->right;}if ((!other->left || rb_is_black(other->left)) &&(!other->right || rb_is_black(other->right))){// Case 2: x的兄弟w是黑色,且w的倆個(gè)孩子也都是黑色的 rb_set_red(other);node = parent;parent = rb_parent(node);}else{if (!other->right || rb_is_black(other->right)){// Case 3: x的兄弟w是黑色的,并且w的左孩子是紅色,右孩子為黑色。 rb_set_black(other->left);rb_set_red(other);rightRotate(root, other);other = parent->right;}// Case 4: x的兄弟w是黑色的;并且w的右孩子是紅色的,左孩子任意顏色。 rb_set_color(other, rb_color(parent));rb_set_black(parent);rb_set_black(other->right);leftRotate(root, parent);node = root;break;}}else{other = parent->left;if (rb_is_red(other)){// Case 1: x的兄弟w是紅色的 rb_set_black(other);rb_set_red(parent);rightRotate(root, parent);other = parent->left;}if ((!other->left || rb_is_black(other->left)) &&(!other->right || rb_is_black(other->right))){// Case 2: x的兄弟w是黑色,且w的倆個(gè)孩子也都是黑色的 rb_set_red(other);node = parent;parent = rb_parent(node);}else{if (!other->left || rb_is_black(other->left)){// Case 3: x的兄弟w是黑色的,并且w的左孩子是紅色,右孩子為黑色。 rb_set_black(other->right);rb_set_red(other);leftRotate(root, other);other = parent->left;}// Case 4: x的兄弟w是黑色的;并且w的右孩子是紅色的,左孩子任意顏色。 rb_set_color(other, rb_color(parent));rb_set_black(parent);rb_set_black(other->left);rightRotate(root, parent);node = root;break;}}}if (node)rb_set_black(node); }

removeFixup(root, node, parent)是對(duì)應(yīng)"上面所講的第三步"。它是一個(gè)內(nèi)部接口。

?

紅黑樹的C++實(shí)現(xiàn)(完整源碼)

下面是紅黑樹實(shí)現(xiàn)的完整代碼和相應(yīng)的測(cè)試程序。
(1) 除了上面所說(shuō)的"左旋"、"右旋"、"添加"、"刪除"等基本操作之后,還實(shí)現(xiàn)了"遍歷"、"查找"、"打印"、"最小值"、"最大值"、"創(chuàng)建"、"銷毀"等接口。
(2) 函數(shù)接口大多分為內(nèi)部接口和外部接口。內(nèi)部接口是private函數(shù),外部接口則是public函數(shù)。
(3) 測(cè)試代碼中提供了"插入"和"刪除"動(dòng)作的檢測(cè)開(kāi)關(guān)。默認(rèn)是關(guān)閉的,打開(kāi)方法可以參考"代碼中的說(shuō)明"。建議在打開(kāi)開(kāi)關(guān)后,在草稿上自己動(dòng)手繪制一下紅黑樹。

紅黑樹的實(shí)現(xiàn)文件(RBTree.h)

?View Code

紅黑樹的測(cè)試文件(RBTreeTest.cpp)

?View Code

?

紅黑樹的C++測(cè)試程序

測(cè)試程序已經(jīng)包含在相應(yīng)的實(shí)現(xiàn)文件(MaxHeap.cpp)中了,這里就不再重復(fù)說(shuō)明。下面是測(cè)試程序的運(yùn)行結(jié)果:

== 原始數(shù)據(jù): 10 40 30 60 90 70 20 50 80 == 前序遍歷: 30 10 20 60 40 50 80 70 90 == 中序遍歷: 10 20 30 40 50 60 70 80 90 == 后序遍歷: 20 10 50 40 70 90 80 60 30 == 最小值: 10 == 最大值: 90 == 樹的詳細(xì)信息: 30(B) is root 10(B) is 30's left child 20(R) is 10's right child 60(R) is 30's right child 40(B) is 60's left child 50(R) is 40's right child 80(B) is 60's right child 70(R) is 80's left child 90(R) is 80's right child

總結(jié)

以上是生活随笔為你收集整理的红黑树(三)之 C++的实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

亚洲经典中文字幕 | 亚洲做受高潮欧美裸体 | av在线a | 国产99区| 一二区精品| 色七七亚洲影院 | 久久久久免费视频 | 美女视频黄免费的久久 | 国产精品99久久久久久久久 | 日日躁夜夜躁xxxxaaaa | 国产精品黄色影片导航在线观看 | 亚洲成av片人久久久 | www.com久久久 | 中文字幕在线视频免费播放 | 久久久久 免费视频 | 丁香久久激情 | 亚洲电影自拍 | 91手机电影 | 日韩素人在线观看 | 日本美女xx | 成人av资源| 91精品日韩 | 九九热有精品 | 国产大陆亚洲精品国产 | 成年人毛片在线观看 | 午夜12点| 免费高清在线观看成人 | 99r精品视频在线观看 | 97免费中文视频在线观看 | 亚洲成人软件 | 成人三级黄色 | 中文一区二区三区在线观看 | 欧美一进一出抽搐大尺度视频 | 亚洲免费一级电影 | 久久成人国产精品一区二区 | 麻花豆传媒mv在线观看 | 免费网站v | 成人黄视频 | 免费看短 | 能在线看的av | www.久久色| 亚洲精品动漫成人3d无尽在线 | 日日夜夜天天综合 | 精品在线观看一区二区三区 | 色吊丝在线永久观看最新版本 | 欧美91精品久久久久国产性生爱 | 日本久久中文字幕 | 天天色视频 | 欧美在线视频一区二区三区 | 爱干视频| 黄色电影网站在线观看 | 日韩在线中文字幕视频 | av电影在线观看完整版一区二区 | 久久综合久久综合这里只有精品 | 丁香 婷婷 激情 | 欧美人人 | 亚洲人成免费网站 | 激情深爱 | 超碰av在线 | 天天射天 | 久久这里有 | 99人久久精品视频最新地址 | 一区二区影院 | 中文字幕精品www乱入免费视频 | 日韩电影在线观看一区二区三区 | 亚洲视频在线视频 | 狠狠色丁香久久婷婷综 | 韩国av免费 | 女人18片 | 天天摸天天操天天爽 | 免费成人短视频 | 99精品在线视频播放 | 亚洲国产免费看 | www最近高清中文国语在线观看 | 国产中文字幕在线播放 | 日韩理论片中文字幕 | 丁香av| 少妇av片| 国产福利精品视频 | 在线小视频你懂的 | 久久免费观看视频 | 五月激情丁香婷婷 | 亚洲精品视频在线免费 | 2019精品手机国产品在线 | 国产精品观看视频 | 天天躁日日躁狠狠躁av中文 | 欧美福利在线播放 | 日韩有码中文字幕在线 | 午夜婷婷在线播放 | 黄色一级性片 | 久久人人爽人人爽 | 亚洲国产成人在线观看 | 99在线高清视频在线播放 | 国产 欧美 在线 | 中文在线亚洲 | 亚洲成人资源在线 | 一区二区三区电影 | 黄色午夜| 久久狠狠亚洲综合 | 91在线一区 | 在线免费高清视频 | 日本在线观看黄色 | 精品一区二区精品 | 六月丁香婷婷久久 | 亚洲欧美日韩一二三区 | 亚洲最大色 | 欧美成人按摩 | 午夜精品99久久免费 | 国产一区视频在线 | 少妇视频在线播放 | 99热九九这里只有精品10 | av资源网在线播放 | 久久久久国产精品免费网站 | 成年人视频在线免费 | 国产一级片播放 | 久久久久亚洲国产 | 亚洲第一色 | 一区二区三区在线播放 | 国产成人久久77777精品 | 久久国产电影 | 久久色中文字幕 | 国产一区二区在线播放视频 | 国产视频一区在线 | 久久蜜桃av | 久久线视频 | 国产精品1区 | 中文字幕久久亚洲 | 日韩乱码中文字幕 | av九九九| 97在线观看免费高清 | 午夜精品久久久久久久久久久 | 亚洲日本色 | 天堂在线视频免费观看 | 日韩r级电影在线观看 | 国产69精品久久久久久久久久 | 亚洲黄色免费观看 | 色久综合| 毛片网在线播放 | 在线观看小视频 | 日韩精品视频在线免费观看 | 伊人激情综合 | 中文字幕传媒 | 国产精品久久99 | 国产乱码精品一区二区三区介绍 | 亚洲精品tv久久久久久久久久 | 黄色软件网站在线观看 | 4438全国亚洲精品在线观看视频 | 久久久久免费精品视频 | 二区三区在线视频 | 国产高清视频在线播放 | 日韩精品一区二区三区在线视频 | 黄色av观看 | 国产亚洲免费的视频看 | 啪啪小视频网站 | 久久激情五月婷婷 | 欧洲精品视频一区 | 色丁香婷婷 | 夜色成人网 | 日本中文字幕在线看 | 久久99久久99精品免观看粉嫩 | 国产精品久久久久久久久久直播 | 久久欧美综合 | av一区二区在线观看中文字幕 | 探花系列在线 | 久久8| 在线视频99 | 超碰在线观看av.com | 国产999精品久久久久久麻豆 | 国产精品 国内视频 | 911精品视频| 日本在线中文在线 | 中文字幕在线观看亚洲 | 中文视频一区二区 | 日韩免费 | 亚洲黄网站 | 日本黄色大片免费看 | 超黄视频网站 | 久久午夜免费观看 | 国产小视频在线 | 日韩在线观看一区 | 这里有精品在线视频 | 日韩中文免费视频 | 国产精品丝袜久久久久久久不卡 | 亚洲国产成人精品在线观看 | 久久成人麻豆午夜电影 | 精品国产美女 | 成年人在线观看 | 国产中文字幕视频 | 中文字幕在线乱 | 久久精品2 | 日韩精品免费在线视频 | 狠狠狠狠狠狠干 | 91中文字幕在线 | 99久久久久免费精品国产 | 成人小视频免费在线观看 | a v在线观看 | 天天操人人干 | 亚洲成人免费在线观看 | 最近中文字幕 | 国产涩图| 久久人人97超碰国产公开结果 | 日韩理论影院 | 久久久精品一区二区三区 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 婷婷视频在线 | 亚洲欧美国产日韩在线观看 | 激情综合电影网 | 色91在线 | av网站在线免费观看 | 在线 日韩 av | 久久精品www人人爽人人 | 久久蜜臀一区二区三区av | 69av在线播放 | 欧美视频二区 | 亚洲专区视频在线观看 | 最新一区二区三区 | 成人精品一区二区三区中文字幕 | 日韩有码中文字幕在线 | 中文字幕888 | 激情综合色图 | 一区二区精品在线 | 国产黄色在线网站 | 国产精品中文久久久久久久 | 九九视频精品在线 | 有码中文字幕在线观看 | 天天色天天射天天综合网 | 日韩动态视频 | 久草在线久草在线2 | 久久久999 | 五月激情视频 | 精品欧美一区二区精品久久 | 97操操| 天堂av在线免费 | 激情伊人五月天久久综合 | 99久久久国产精品 | 91在线精品播放 | 在线国产专区 | 色偷偷88888欧美精品久久 | 成人一区在线观看 | 久久免费美女视频 | 天天操夜夜操夜夜操 | 97超碰人人在线 | 不卡精品视频 | 国产这里只有精品 | 天天色天天射天天操 | 麻豆你懂的| 久久免费视频一区 | 天天综合网久久 | 国产伦理一区二区 | 国产精品久久久一区二区三区网站 | 欧美国产日韩一区二区三区 | 亚洲另类xxxx| 久久久久免费精品 | 亚洲最大的av网站 | 成人免费xyz网站 | 在线观看中文字幕一区二区 | 午夜在线免费观看视频 | 91麻豆精品一区二区三区 | 99久久99热这里只有精品 | 日韩91在线 | 91精品免费在线视频 | 97超碰人人在线 | 国产亚洲一区二区三区 | 国产精品高清在线观看 | 欧美日本啪啪无遮挡网站 | 中文字幕精品久久 | 成年人免费在线播放 | 国产美女在线免费观看 | 精品不卡av| 亚洲欧美日韩在线一区二区 | 人九九精品 | 国产成人精品久久 | 天天色天天射天天综合网 | a√天堂资源 | 久久视频 | 日韩大片免费在线观看 | 国产精品久久久久av福利动漫 | 亚洲一级片在线观看 | 日韩美女av在线 | 91精品成人 | 亚洲精品在线国产 | 中文字幕亚洲欧美 | 77国产精品 | 国产日韩三级 | 天天爽网站 | 久久久久久久亚洲精品 | 日本久热 | 久久天堂网站 | 欧美日韩一区二区三区视频 | 狠狠干我 | 日日夜夜综合网 | 91在线免费观看国产 | 久久免费视频播放 | 在线看欧美 | 超碰在线公开免费 | 中文字幕在线资源 | 制服丝袜一区二区 | 97精品超碰一区二区三区 | 开心综合网 | 91视频免费网站 | 日韩三级视频在线观看 | 九九九九精品 | 国产美女主播精品一区二区三区 | 久草免费在线视频 | 中文字幕亚洲综合久久五月天色无吗'' | 麻豆成人网| 91麻豆精品国产午夜天堂 | 久久视频在线免费观看 | 青草视频免费观看 | 色视频国产直接看 | 日韩中文字幕一区 | 97av在线视频免费播放 | 免费看毛片网站 | 免费欧美 | 欧美另类美少妇69xxxx | 99这里都是精品 | 国产中文a | 亚洲精品资源 | 亚洲最大av | 99热最新精品 | 97精品国自产拍在线观看 | 免费观看一级视频 | 亚洲黄色区| 亚洲激情在线观看 | 香蕉影院在线播放 | 91完整版在线观看 | av免费在线免费观看 | 国产一级片观看 | 97成人在线 | 天天天天天天天天操 | 西西大胆免费视频 | 国产中文字幕视频在线观看 | 久久国产精品久久久 | 涩涩网站免费 | 亚洲电影影音先锋 | 久久免费的精品国产v∧ | 免费v片| 91片黄在线观看动漫 | 欧美成a人片在线观看久 | 99久久99久久精品国产片果冰 | 欧美久久久久久久久 | 国产精品久久久久影院 | 日韩免费在线视频观看 | 日韩免费二区 | 99久久婷婷国产精品综合 | 2018亚洲男人天堂 | 久久精品久久久精品美女 | 人人爽人人爽人人 | 免费色网站 | 国产在线一区二区三区播放 | 狠狠色狠狠综合久久 | 国产黄在线看 | 国产高清永久免费 | 国产亚州精品视频 | 伊人网综合在线观看 | 精品国产理论 | 黄色1级毛片 | 91成人精品一区在线播放 | 天堂av在线7| 香蕉视频在线网站 | 欧美激情片在线观看 | 人人爽人人做 | 久久久高清免费视频 | 成人黄色在线电影 | 探花视频在线观看免费版 | 天天干,天天射,天天操,天天摸 | 日韩高清在线一区二区三区 | 91亚洲精品视频 | 亚洲精品日韩在线观看 | 午夜精品一二区 | 韩国三级av在线 | 尤物九九久久国产精品的分类 | 国产精品久久久久久999 | 日韩三级视频在线观看 | 91精品免费 | 午夜 久久 tv| 欧美在线一级片 | 久久久精选 | 久久爱资源网 | 一级免费看视频 | 久久国产精品99久久人人澡 | 中文字幕丝袜制服 | 精品久久影院 | 天天超碰 | 波多野结衣在线视频免费观看 | 亚洲午夜电影网 | www.天天射.com | 成人夜晚看av | 91资源在线视频 | 国产在线播放一区二区三区 | 网址你懂的在线观看 | 国产精品久久久久久久7电影 | 国产色婷婷 | 97视频在线看 | 国产精品永久在线观看 | 国产精品自拍在线 | 日韩中文字幕在线 | 日本老少交 | 中文字幕在线观看一区二区 | 亚洲国产精品激情在线观看 | 999久久久久 | 日韩高清一二区 | 日韩.com | 免费毛片一区二区三区久久久 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 国产一级免费av | 国产精品网红直播 | 日日夜夜精品视频天天综合网 | 亚洲精品国产成人av在线 | a级国产片 | 黄色网免费 | 色小说在线| 青青网视频 | 天天综合天天做天天综合 | 新版资源中文在线观看 | 超碰97人人射妻 | 国产亚洲精品久久 | 精品国产伦一区二区三区免费 | 男女激情网址 | av福利在线看 | 日韩在线视 | 久久99视频免费观看 | 国产视频高清 | 中文字幕中文中文字幕 | 日本久久久精品视频 | 国产成人在线网站 | 亚洲精品日韩一区二区电影 | 国产午夜精品一区二区三区 | 国产91免费观看 | 91视频一8mav | 超碰在线观看av.com | www.色爱| 天天操天天操天天操天天 | 久草精品视频 | 亚洲天堂精品视频在线观看 | www免费 | 91禁在线观看 | 亚洲国产精品久久久久久 | 日本爱爱免费视频 | 97成人精品| 日本韩国精品一区二区在线观看 | 久久狠狠一本精品综合网 | 欧美 另类 交 | 久久免费中文视频 | 国产免费xvideos视频入口 | www黄色软件 | 99久久精品国产一区二区成人 | 福利电影久久 | 成年人黄色免费看 | 人人舔人人爱 | 中文字幕在线播放日韩 | 伊人激情网 | 欧美韩国日本在线观看 | 黄网站a | 国产剧在线观看片 | 久久久久国产精品www | 97国产精品一区二区 | 国内一区二区视频 | 不卡av电影在线观看 | 久久久免费少妇 | 激情综合电影网 | 操天天操 | 日韩黄在线观看 | 九九色综合 | 婷婷色在线 | 亚洲精品在线视频 | 99视频在线免费 | 日韩免费一区二区 | 四虎在线免费观看 | 精品91 | 国产精品9区 | 欧美一区二区三区在线视频观看 | 亚洲 综合 精品 | 开心激情网五月天 | 日日碰狠狠躁久久躁综合网 | 成人永久在线 | 亚洲精品一区二区在线观看 | 日韩理论电影在线观看 | 精品久久免费看 | 久久精品久久久久 | 激情网五月天 | 天天se天天cao天天干 | 伊人婷婷色 | 91精品欧美| 99精品国产亚洲 | 日韩av美女 | 亚洲第一香蕉视频 | 区一区二在线 | 日韩欧美国产激情在线播放 | 中文字幕网站 | 福利视频在线看 | 97免费视频在线播放 | 国产激情电影综合在线看 | 国产在线黄 | 国产精品免费观看网站 | av三级av| 国产精品久久久久永久免费观看 | 香蕉视频导航 | 亚洲国产字幕 | 天天综合天天做天天综合 | 国产伦精品一区二区三区… | 亚洲狠狠 | 在线亚洲成人 | 久久99热国产 | 91成人在线观看高潮 | 国产精品久久久久久久久久白浆 | 久草在线视频首页 | 国产精品福利无圣光在线一区 | 亚洲女同ⅹxx女同tv | 国产91九色蝌蚪 | 久久不射电影网 | 天天干,天天射,天天操,天天摸 | 国产精品亚洲视频 | 中文字幕视频 | 91精品国产高清自在线观看 | 精品在线小视频 | 国产伦理久久 | 久久午夜精品 | 四月婷婷在线观看 | 亚洲欧美日韩精品久久奇米一区 | 日本丶国产丶欧美色综合 | 国产精品久久久久久久久久免费 | 久久99精品一区二区三区三区 | 91精品视频免费观看 | 国产精品视频全国免费观看 | 黄色毛片大全 | 99视频精品免费观看, | 91大神dom调教在线观看 | 午夜久操 | 欧美激情精品久久久久久免费 | 久久久久久久毛片 | 国产在线永久 | 精品国产一区二区三区久久影院 | 亚洲天天在线日亚洲洲精 | 色射爱 | 国产玖玖在线 | 国产一级精品视频 | 韩日精品在线 | 特级西西444www大胆高清无视频 | 国产精品成人av久久 | 天天综合操 | av在线免费观看网站 | 午夜免费福利片 | 99久久婷婷国产一区二区三区 | 天天射,天天干 | 日本中文乱码卡一卡二新区 | 日韩精品一区二区三区水蜜桃 | 视频在线观看日韩 | 成 人 黄 色 免费播放 | 天天射天天干天天 | 黄色网免费 | 欧美亚洲另类在线视频 | 亚洲精品国产欧美在线观看 | 久草在线免费看视频 | 天天鲁天天干天天射 | 国产在线欧美日韩 | 亚洲高清免费在线 | 久久国产精品99久久久久 | 国产成人精品久久久久 | 青春草免费在线视频 | 香蕉在线视频播放网站 | 日韩在线观看网址 | 精品国产99国产精品 | 国产福利91精品张津瑜 | 婷婷精品视频 | 成人av电影在线播放 | av成人免费网站 | 色在线视频网 | 国产一区二区三区免费在线观看 | 国产精品涩涩屋www在线观看 | 国模精品一区二区三区 | 91av在线电影| 国产精品手机在线 | 丁香视频全集免费观看 | 国产一级不卡毛片 | 在线电影中文字幕 | 91av资源网 | 久久久蜜桃 | 免费在线观看成年人视频 | 国产中文字幕久久 | av免费看网站 | 青青河边草免费 | 色av色av色av | 91免费看黄 | 97超碰国产精品 | 久久91久久久久麻豆精品 | 亚洲成人第一区 | av网站手机在线观看 | 涩涩网站在线播放 | 亚洲少妇天堂 | 国产精品久久久久久久久久免费看 | 玖玖视频| 日韩精选在线 | 亚洲免费在线 | 久久综合给合久久狠狠色 | 成人在线免费小视频 | 免费福利视频网 | 久久免费美女视频 | 免费在线色视频 | 成人久久视频 | 福利视频精品 | 国产一区二区三精品久久久无广告 | 91热视频| 成人在线视频一区 | 国产小视频在线免费观看视频 | 91视频中文字幕 | 免费黄色av电影 | 亚洲电影第一页av | 国产色在线视频 | 中文字幕视频一区 | av午夜电影 | 天天插天天操天天干 | 欧美另类z0zx| 久久再线视频 | 日韩在线观看三区 | av在线不卡观看 | 欧美精品v国产精品v日韩精品 | 午夜视频在线观看一区二区 | 国产一性一爱一乱一交 | 国产成人精品福利 | 国产无套精品久久久久久 | 国产精品女同一区二区三区久久夜 | 一区二区三区免费 | 久久综合狠狠 | 香蕉视频在线视频 | 欧美一区二区在线 | 国产精品自产拍在线观看中文 | 四虎免费在线观看视频 | 久久精品视频在线观看免费 | 亚洲国产精品日韩 | 色a在线观看 | 五月婷婷丁香色 | 国产免费成人 | 91精品一区国产高清在线gif | 成人午夜久久 | 日批网站免费观看 | 午夜av片 | 99精品在线视频播放 | 日韩视频免费观看高清完整版在线 | 中文字幕免费高清 | 日本久久视频 | 亚洲成人网av | 亚洲国产影院av久久久久 | 天天搞天天干天天色 | 久久av一区二区三区亚洲 | 久久婷婷开心 | 久久精品视频5 | 五月色婷 | 国产精品一区二区美女视频免费看 | 91中文字幕在线视频 | 五月天激情综合 | 国产午夜在线观看 | 成人a级免费视频 | 亚洲精品久久久久58 | 欧美日韩中文字幕在线视频 | 国产只有精品 | 日本中文字幕观看 | 亚洲乱码久久 | 天天天天综合 | 91视视频在线直接观看在线看网页在线看 | 久久人人爽爽人人爽人人片av | 成人久久电影 | 日韩r级在线 | 欧美日韩性视频 | 欧美在线视频一区二区 | 九9热这里真品2 | 成人啪啪18免费游戏链接 | 99国产精品久久久久久久久久 | 久久久免费视频播放 | 成人黄色电影在线播放 | 国产精品18久久久久白浆 | 亚洲视频在线免费观看 | 日韩视频免费观看高清 | 天堂v中文| 在线一二三区 | 伊人黄| 狠狠色噜噜狠狠狠 | 欧美日韩一区二区三区不卡 | 中文字幕中文字幕中文字幕 | 久热久草在线 | 在线亚洲激情 | 国产又黄又爽又猛视频日本 | 婷婷综合影院 | 亚洲精品小视频在线观看 | 色国产精品 | 国产精品久久一卡二卡 | 国产黄在线播放 | 深爱激情婷婷网 | 狠狠gao | 色婷婷狠狠五月综合天色拍 | 亚洲成人午夜av | 成人av在线播放网站 | 色999视频 | 国内精品中文字幕 | 丁香网婷婷| 久久国产网站 | 亚洲一区二区视频在线 | 91专区在线观看 | 国产成人久久精品一区二区三区 | 久久精品福利视频 | 九九免费在线观看视频 | 九九热视频在线 | 91天天操 | 国产福利在线 | 亚洲三级黄色 | 97在线视频免费看 | 天天舔天天射天天操 | 2019久久精品 | 九月婷婷人人澡人人添人人爽 | 免费h漫在线观看 | 四虎影视www | 91插插插网站 | 丁香婷婷久久 | 99精品国产99久久久久久97 | 久久成人国产精品入口 | 国产一区二区视频在线 | 天天天干 | 一区二区中文字幕在线观看 | 成人精品一区二区三区电影免费 | 亚洲 欧美 91 | 91中文字幕在线播放 | 亚洲成人av在线 | 欧美大香线蕉线伊人久久 | av大片免费在线观看 | 丁香花在线观看免费完整版视频 | 成人h动漫在线看 | 九九视频精品在线 | 免费网站在线观看人 | 亚洲国产欧美一区二区三区丁香婷 | 日韩激情网 | 国产精品人人做人人爽人人添 | 天天操夜夜操夜夜操 | 久久精品9 | 久久国产精品一区二区三区四区 | 在线观看视频你懂得 | 亚洲成人999 | 久久99国产精品视频 | 国产伦理久久精品久久久久_ | 91传媒在线播放 | 婷婷久久精品 | 久草久视频 | 国产成人精品av | 精品国产不卡 | 在线 欧美 日韩 | 欧美国产在线看 | 国产成人一区二区三区在线观看 | 天天综合网久久综合网 | 午夜美女av| 国产精品理论片在线观看 | 国产精品永久在线 | 中文字幕xxxx| 日韩中文字幕视频在线观看 | 中文日韩在线视频 | 波多野结衣在线观看视频 | 天天色天天操天天爽 | 综合网伊人 | 超碰av在线| 天天操偷偷干 | 精品v亚洲v欧美v高清v | 国产精品淫 | 中文字幕第一页在线vr | 99精品视频在线观看免费 | 亚洲精品456在线播放乱码 | 黄色精品免费 | 色91av | 五月天色中色 | 中文日韩在线 | 亚洲h色精品 | 亚洲成人黄色在线 | 五月婷婷综合在线视频 | 高清av免费一区中文字幕 | 亚洲爱av | 91久久奴性调教 | 蜜臀av夜夜澡人人爽人人 | 久久久九色精品国产一区二区三区 | 日韩高清在线看 | 99久久激情视频 | 成人97视频 | 成人a视频片观看免费 | 久久五月天婷婷 | 国产黄色看片 | 日韩久久久久久久久久久久 | 日日夜夜精品免费观看 | 久久久久久久久久久久电影 | 国产免费av一区二区三区 | 成人一区二区三区中文字幕 | 国产精品久久伊人 | 日日爽夜夜操 | 一区二区三区四区五区在线 | 国产激情小视频在线观看 | 99久久免费看 | 日日操日日操 | 天天操天天干天天摸 | www激情久久| 天天操天天操天天操天天操天天操 | 午夜精品久久久久久久99热影院 | 久久8精品| 最近2019好看的中文字幕免费 | 国产传媒中文字幕 | 天天爽综合网 | 国产精品九九九九九 | 97超碰人人澡人人爱 | 九九热在线精品视频 | 九色免费视频 | 狠狠色丁香婷婷综合基地 | 在线免费观看的av网站 | 一区二区中文字幕在线 | av黄在线播放 | 久草网视频 | 中文字幕亚洲精品日韩 | 午夜色性片 | 五月天综合网 | 日韩在线视频免费观看 | 久久人网 | 欧美性色综合网站 | 欧美精品免费视频 | 色婷婷视频在线 | 91精品国自产在线偷拍蜜桃 | 天海翼一区二区三区免费 | 久久久免费看视频 | 成人影音在线 | 国产精品不卡在线观看 | 99精品欧美一区二区三区 | 久久久黄色免费网站 | 97精品国产97久久久久久久久久久久 | 久久成年人视频 | 亚洲成人黄色网址 | 综合天天 | 午夜狠狠干 | 99爱在线观看| 国产成人精品一区二 | 中文字幕在线观看网址 | wwxxxx日本 | 亚洲黄色三级 | 国产精品成人一区二区 | 深爱开心激情网 | 精品国精品自拍自在线 | 久久精品电影院 | 国产精品久久久久久麻豆一区 | 香蕉色综合 | 免费又黄又爽的视频 | 天堂av免费在线 | 五月天精品视频 | 国产精品激情偷乱一区二区∴ | 黄色国产成人 | 五月天狠狠操 | 成人av在线亚洲 | 欧美日韩一区二区在线观看 | 色成人亚洲网 | 婷婷五月色综合 | 成年人在线 | 日韩一级理论片 | 久久免费毛片 | 日日操天天操狠狠操 | 免费视频91 | www.亚洲激情.com | 超碰在线99 | 午夜精品av| 国产精品一区欧美 | 国内久久精品视频 | 亚洲电影一区二区 | 免费久久99精品国产 | 成片免费观看视频大全 | 久久国产一区二区 | av免费在线看网站 | 久久精品高清 | 欧美成人黄 | 国产xxxxx在线观看 | 国产小视频免费在线观看 | 色的网站在线观看 | 国产资源 | 中文av在线播放 | 激情视频久久 | 日韩高清激情 | 中文字幕在线观看免费高清完整版 | 日韩欧美在线观看一区二区三区 | 日韩欧美一二三 | 婷婷九月激情 | 欧美色图狠狠干 | 丁香婷婷久久 | 日韩二三区 | 欧美精品中文 | 精品免费久久 | 97福利视频| 天天射天天舔天天干 | 久久成熟| 日韩中文字幕免费在线播放 | 1024手机看片国产 | 亚洲精品美女久久久久网站 | 97超视频在线观看 | 999成人精品 | 黄色小说免费在线观看 | 欧美在线a视频 | 亚洲码国产日韩欧美高潮在线播放 | 色婷婷av在线 | 亚洲最新毛片 | 国产99色 | 激情丁香月 | 精品国产乱码一区二区三区在线 | 国产精品免费久久久久久久久久中文 | 国产精品精品视频 | 亚洲欧美一区二区三区孕妇写真 | 五月激情天 | 中文字幕在线看视频国产 | 四虎在线观看精品视频 | 天天操天天干天天爱 | 中文字幕在线视频一区 | 色99之美女主播在线视频 | av不卡免费在线观看 | 在线观看 国产 | 国产黄色精品在线 | 亚洲精品乱码久久久久久蜜桃动漫 | 一区二区三高清 | 激情久久网 | 福利视频在线看 | 欧美亚洲久久 | 亚洲精品88欧美一区二区 | 成人久久 | 国产91成人在在线播放 | 久久五月激情 | 天天噜天天色 | 国产精品免费av | 久久国产精品电影 | 久久成熟 | 日韩在线观看你懂得 | 色wwwww | 久草视频在线新免费 | 亚洲乱码在线 | 亚洲精品高清在线观看 | 久久综合狠狠综合久久激情 | 欧美激情精品久久久 | 久久伊人精品天天 | 成人av在线亚洲 | 在线精品视频免费播放 | 九九九毛片 | 综合久久网 | 久久国产精品久久久 | 国产精品一区在线播放 | 国产精品18久久久久久不卡孕妇 | 福利视频导航网址 | 久久精品日产第一区二区三区乱码 | 欧美日韩午夜爽爽 | 狠狠亚洲| 伊人婷婷网 | 超碰在线94 | 在线视频免费观看 | 国产黄色在线网站 | 亚洲高清在线精品 | 视频在线观看亚洲 | a一片一级 | 久久永久免费视频 | 久久久久国产精品午夜一区 | 热精品 | 在线观看中文字幕2021 | 日韩欧美一级二级 | 免费的黄色av | 一区二区 不卡 | 激情丁香综合五月 | 国产高清在线视频 | 国产黄色精品在线观看 | 欧美做受高潮1 | 国产精品一区欧美 | 日日操日日干 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 国产又粗又硬又长又爽的视频 | 五月天av在线 | 国产伦理久久精品久久久久_ | 嫩草伊人久久精品少妇av | 国产精品免费人成网站 | 中文日韩在线视频 | 亚洲国产激情 | 久久久久观看 | 免费高清在线视频一区· | 亚洲视频 在线观看 | 午夜影院一级片 | 视频二区在线视频 | 人人草人人做 | 日日操操操 | 精品国产美女在线 | 久久久久久久久免费视频 | 国产欧美精品一区二区三区四区 | 欧美一级免费片 | 五月天视频网站 | 欧美另类xxxxx | 日本超碰在线 | 亚色视频在线观看 | 激情婷婷久久 | 天天av资源| 日韩一级黄色大片 | 婷婷丁香导航 | 日韩精品免费一区二区 | 99产精品成人啪免费网站 | 免费麻豆网站 | 日韩欧美电影 | 欧美日韩精品在线视频 | 日韩欧美视频免费看 | 久久精品一 | 天天艹天天操 |