久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

真c++ 从二叉树到红黑树(6)之红黑树RedBlack

發布時間:2023/12/8 c/c++ 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 真c++ 从二叉树到红黑树(6)之红黑树RedBlack 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??此文章為從二叉樹到紅黑樹系列文章的第六節,主要介紹介紹紅黑樹,相信,有了之前BST,AVL和B樹的鋪墊,你會很快地理解紅黑樹。但紅黑樹的情況也十分復雜,因此,推薦分兩天來看紅黑樹。一天看插入,一天看刪除。


文章目錄

  • 一、所有文章鏈接~(點擊右邊波浪線可以返回目錄)
    • 理解紅黑樹之前,需要了解的知識點:~
  • 二、引入紅黑樹~
  • 三、紅黑樹的性質~
    • 1.紅黑樹的外部節點~
    • 2.紅黑樹的性質~
      • 紅黑樹性質解讀~
    • 3.紅黑樹的適度平衡~
    • 4.紅黑樹與B樹(2,4)樹的關系(提升變換)~
      • 提升變換的四種組合~
  • 四、紅黑樹類~
    • (一)定義變量和接口~
      • 1.利用已有的變量~
      • 2.需要的接口~
      • 3.重要輔助函數~
        • (1)重寫高度更新算法~
        • (2)雙紅,雙黑缺陷~
      • 4.類內輔助靜態函數~
      • 5.RedBlack.h~
    • (二)高度更新~
      • 高度更新代碼~
    • (三)紅黑樹的插入代碼~
    • (四)雙紅修復~
      • 1) u為黑色~
        • a) LL型~
        • b) RR型~
        • c) LR型~
        • d) RL型~
      • 2) u為紅色~
        • a) LL型~
        • b) RR型~
        • c) LR型~
        • d) RL型~
      • 3) 求當前節點的叔叔代碼~
      • 4) 雙紅修復代碼遞歸版~
      • 5) 雙紅修復代碼迭代版~
      • 6) 雙紅修復的復雜度~
    • (五)紅黑樹的刪除~
      • 1.再探removeAt語義~
        • (1)removeAt的第一種和第二種情況~
        • (2)removeAt的第三種情況~
        • (3)結論~
        • (4)removeAt其他細節~
      • 2.紅黑樹的刪除~
        • (1)刪除情況分析~
        • (2)刪除代碼~
        • (3)判斷黑高度是否平衡代碼~
    • (六)雙黑缺陷~
      • (1)s為黑,其至少有一個紅孩子~
      • (2)s為黑,s的兩個孩子為黑,p為紅~
      • (3)s為黑,s的兩個孩子為黑,p為黑~
      • (4)s為紅,s的兩個孩子必然為黑,p必然為黑~
      • (5)雙黑修復遞歸版~
      • (6)雙黑修復迭代版~
      • (7)雙黑修復復雜度~
  • 五、完整RedBlack.h~
  • 六、紅黑樹測試~
    • 1.插入測試代碼~
    • 2.插入測試圖示~
    • 3.刪除測試代碼~
    • 4.刪除測試圖示~
  • 七、結語~

一、所有文章鏈接~(點擊右邊波浪線可以返回目錄)

??在閱讀本文前,強烈建議你看下前面的文章的目錄、前言以及基本介紹,否則你無法理解后面的內容。鏈接如下:

  • 基本二叉樹節點,通用函數 二叉樹節點
  • 基本二叉樹類的定義和實現 二叉樹基類
  • BST(二叉搜索樹的實現) BST
  • AVL(二叉平衡搜索樹的實現)AVL
  • B樹的實現(如果你只想了解B樹,可以跳過所有章節,直接看B樹,B樹的理解是紅黑樹的基礎)B樹
  • 紅黑樹的實現 RedBlack
  • 理解紅黑樹之前,需要了解的知識點:~

  • 在本系列文章第三部分BST中的刪除的基本原理
  • 在本系列文章第四部分AVL中的connect34和rotateAt的基本原理
  • 在本系列文章第五部分B樹中的插入和刪除,上溢和下溢的基本原理
  • 如果你還不了解,那么看接下來的內容,你可能會有點吃力。


  • 二、引入紅黑樹~

    ??AVL樹盡管可以保證最壞情況下的單次操作速度,但需在節點中嵌入平衡因子等標識;更重要的是,刪除操作之后的重平衡可能需做多達?log2n?次旋轉,從而頻繁地導致全樹整體拓撲結構的大幅度變化。

    ??紅黑樹即是針對后一不足的改進。通過為節點指定顏色,并巧妙地動態調整,紅黑樹可保證:在每次插入或刪除操作之后的重平衡過程中,全樹拓撲結構的更新僅涉及常數個節點。



    三、紅黑樹的性質~

    1.紅黑樹的外部節點~

    ??一棵樹,所有葉節點都有空孩子指針,因此,為了方便理解,可以將這些空孩子指針全部視為外部節點。即假想地加入外部節點(實際并沒有加入),使得樹中任何節點都可以視為有左右孩子。

    ??下面是一顆紅黑樹

    ??若按1中給這顆樹增加外部節點,就可以得到

    2.紅黑樹的性質~

    ??提示:如果你看紅黑樹的算法,感到某些地方不好理解時,不妨來看看紅黑樹的性質,你就會明白算法為什么要這么設計。

    由紅、黑兩色節點組成的二叉搜索樹若滿足以下條件,即為紅黑樹

    (1) 樹根始終為黑色
    (2) 外部節點均為黑色(NULL LEAF)(假想,實際不存在)
    (3) 其余節點若為紅色,則其孩子節點必為黑色,反之,其父親也必然為黑色。
    (4) 從根節點到任一外部節點的沿途,黑節點的數目相等(黑深度相等)

    紅黑樹性質解讀~

  • 由條件(1)(2)可知,紅節點必然為內部節點。
  • 由條件(3)可知紅節點的孩子和父親必然為黑色。即樹中任何一條通路中絕對不可能有相鄰的紅節點。
  • 由以上兩個分析可知,在從根節點通往任一節點的沿途,黑節點都不少于紅節點。
  • 從根節點到任意節點所經的黑節點數目稱為該節點的黑深度(由上往下)。(根節點黑深度為0)。由條件(4)可知,所有外部節點的黑深度必然相等。
  • 從外部節點到內部任意節點,所經的黑節點的個數的最大值,稱之為這個內部節點的黑高度(由下往上)。因此,外部節點的黑高度為0,根節點的黑高度等于外部節點的黑深度。
  • 由以上可以得知,任意一個節點,其左右子樹的黑高度都必然相等。
  • 3.紅黑樹的適度平衡~

    ??由2中的紅黑樹的性質解讀的第三條,可以得知

    在從根節點通往任一節點的沿途,黑節點都不少于紅節點。

    ??而一棵樹,就是由紅節點和黑節點組成,這樣就代表,黑節點的數目,至少比全樹所有節點的數目的一半大。而這一點,恰恰就是紅黑樹適度平衡的條件。

    TB為黑高度(H),T為全樹的高度(h)。

    更嚴格的有log2(n + 1) <= h <=2?log2(n + 1)(證明略)

    ??盡管紅黑樹不能如完全樹那樣可做到理想平衡,也不如AVL樹那樣可做到較嚴格的適度平衡,但其高度仍控制在最小高度的兩倍以內,從漸進的角度看仍是O(logn),依然保證了適度平衡—這正是紅黑樹可高效率支持各種操作的基礎。

    4.紅黑樹與B樹(2,4)樹的關系(提升變換)~

    ??往下看之前,建議你理解一下B樹的上溢和下溢。不懂的就看看本系列文章的第五部分,我對B樹進行了詳解。

    ??在后面就可以得知,經適當轉換之后,紅黑樹和(2,4)樹相互等價!
    ??具體地,自頂而下逐層考查紅黑樹各節點。每遇到一個紅節點,都將對應的子樹整體提升一層,從而與其父節點(必黑)水平對齊,二者之間的聯邊則相應地調整為橫向。
    ???????????????
    ??由紅黑樹的性質(3)可得,對于有紅孩子的黑節點而言,提升過程中,所涉及的節點至多不超過3個(可能為2個,當只有一個紅孩子時),因為其最多只有兩個紅孩子,而對應的紅孩子必然只有黑孫子,沒有紅孫子。

    ??因此由變換之后的結果可以觀察到,可以把變換之后的3個節點(或2個節點)看做一個整體,其恰好可以構成4階B樹(3個關鍵碼)中的一個節點。因此,變換之后,每一顆紅黑樹都對應一顆(2,4)樹。

    提升變換的四種組合~

    1、 通往黑節點的邊對紅黑樹的黑高度有貢獻,以實線表示,保留下來。
    2、 通往紅節點的邊對紅黑樹的黑高度沒有貢獻,以虛線表示,不予保留。

    下圖中,上方是紅黑樹,下方是對應的B樹。


    ??從上圖可以看出,對應的(2,4)B樹。每個節點有且僅有一個黑色的關鍵碼,同時紅色的關鍵碼不超過兩個,若某個節點果真包含兩個紅關鍵碼,則黑關鍵碼的位置必然居中。



    四、紅黑樹類~

    (一)定義變量和接口~

    1.利用已有的變量~

    在第一部分定義二叉樹節點的時候,我們定義了一個

    RBColor _color;//紅黑樹專用

    這個枚舉類,主要是用于表示紅黑樹的顏色信息。具體為

    namespace {enum class RBColor { RED, BLACK }; }

    并且同樣,我們會用到在BST定義的_hot節點

    BinNodePtr _hot;//"命中節點"的"父親"

    2.需要的接口~

    ??由于在BST中,我們已經定義了查找search算法,因此,不需要給RedBlack重新寫查找算法,只需要對插入和刪除算法進行重寫既可(并且在后面可以發現,其插入和刪除的本質,跟BST和AVL一模一樣!)。并且在BinTree中,我們也定義了遍歷算法,因此,也沿用即可。

    在樹中插入一個節點insert 在樹中刪除一個節點remove

    3.重要輔助函數~

    (1)重寫高度更新算法~

    ??由于紅黑樹的高度的表示方式為黑高度,所以其高度更新的算法也需要進行重寫

    更新高度updateHeight

    (2)雙紅,雙黑缺陷~

    ??這兩個輔助函數,正是紅黑樹得以保持平衡的最主要原因。在接下來介紹插入時,會解釋雙紅缺陷,在介紹刪除時,會解釋雙黑缺陷。

    solveDoubleRed解決雙紅缺陷 solveDoubleBlack解決雙黑缺陷

    4.類內輔助靜態函數~

    ??為了加快算法執行的效率,和方便理解,在紅黑樹類內定義了4個靜態內聯函數。前兩個很好理解,后面兩個在介紹插入和刪除算法時會進行解釋。

    IsBlack//判黑//當然x為空,也為黑色 IsRed//非黑即紅IsBlackHeightBalanced//判斷是否需要更新黑高度 uncle//獲取當前節點的叔叔

    5.RedBlack.h~

    template<typename T=int> class RedBlack :public BST<T> { protected:using BinNodePtr = BinNode<T>*;protected:void solveDoubleRed(BinNode<T>* x);//雙紅修正void solveDoubleBlack(BinNode<T>* replacer);//雙黑修正constexpr int updateHeight(BinNode<T>* x)const override;//更新高度public:BinNode<T>* insert(const T& data)override;//插入重寫bool remove(const T& data)override;//刪除重寫/*查找沿用BST的查找*//*遍歷沿用BinTree的遍歷*/protected:static constexpr bool IsBlack(const BinNodePtr& x) {//判黑//當然x為空,也為黑色return ((!x) || (RBColor::BLACK == x->_color));}static constexpr bool IsRed(const BinNodePtr& x) {//非黑即紅return !IsBlack(x);}static constexpr bool IsBlackHeightBalanced(const BinNodePtr& x) {//判斷是否需要更新黑高度bool is_L_C_Equal = (stature(x->_lchild) == stature(x->_rchild));int rbHeight = (IsRed(x) ? stature(x->_lchild) : stature(x->_lchild) + 1);//對于rbHeight的計算而言,取左孩子還是右孩子,均一樣bool is_Height_Equal = (x->_height == rbHeight);return is_L_C_Equal && is_Height_Equal;//只要有一個為假,即為假//所以只要左孩子和右孩子高度相等,或者x沒有高度變化,就黑高度平衡 }static inline BinNodePtr uncle(const BinNodePtr& x) {/*獲取x的叔叔*/return IsLChild(x->_parent) ? x->_parent->_parent->_rchild : x->_parent->_parent->_lchild;}};//class RedBlack

    (二)高度更新~

    ??下面是我們在本系列文章第一部分定義的獲取當前節點高度的全局靜態函數。并且我們規定當沒有節點時,高度為-1,當有一個節點時,高度為0(見第一部分關于樹的語義規定中樹的高度的定義)。此規定依然適用于紅黑樹,也就是說,哪怕紅黑樹此時只有一個根節點(必然為黑),其高度為0而不是1
    ??此規定,對于后序紅黑樹的平衡不造成任何影響,但若讀者要獲取紅黑樹的高度的話,就需要明白此時的黑高度,比實際的黑高度少1。

    template<typename BinNodePtr> static constexpr int stature(const BinNodePtr& x) {//獲取高度return x ? x->_height : -1;//空指針高度為-1 }

    高度更新代碼~

    template<typename T> constexpr int RedBlack<T>::updateHeight(BinNode<T>* x) const//由于stature視空節點高度為-1,所以height會比黑高度少一 {x->_height = std::max(stature(x->_lchild), stature(x->_rchild));//孩子一般黑高度相等,除非出現雙黑return IsBlack(x) ? x->_height++ : x->_height;//若當前節點為黑,則計入黑高度 }

    由于重寫了更新高度函數,所以此時x的高度,為黑高度
    要更新紅黑樹的高度(即黑高度),只有當:

    (1)左右孩子黑高度不相等。 (2)x為黑節點時,其高度要加1。 (3)x為紅節點時,其高度不需要額外更新。

    (三)紅黑樹的插入代碼~

    ??紅黑樹的插入算法,與BST,AVL的基本插入方式一模一樣,唯一不同的是后續要進行雙紅修復。

    ??先用BST的search確定不存在這個節點,并且更新_hot的位置,并以_hot為父親,創建一個新節點。并將其黑高度更新為-1,以及染色成紅色(我們默認新加入的節點均為紅色節點,除非新加的是根節點)

    ??由BinNode節點的構造函數,默認新節點為紅色。

    template<typename T> BinNode<T>* RedBlack<T>::insert(const T& data) {BinNode<T>*& x = this->search(data);//沿用BST的查找//并更新_hot//用引用接收if (x)//如果節點存在,則返回return x;x = new BinNode<T>(data, this->_hot, nullptr, nullptr, -1);//設定黑高度-1,并默認節點為紅色this->_size++;solveDoubleRed(x);//雙紅修正//x此時必為紅return x; }

    (四)雙紅修復~

    ??因新節點的引入,而導致父子節點同為紅色的此類情況,稱作“雙紅”(double red)。每引入一個關鍵碼,雙紅修正函數都可能迭代地調用多次。在此過程中,當前節點x的兄弟及兩個孩子(初始時都是外部節點),必然均為黑色

    因為x的父親為紅色,所以其只可能有黑孩子,所以x若有兄弟,則必為黑色。 由于x為新節點,其外部節點為空,即默認均為黑孩子。

    ??將x的父親與祖父分別記作pg。既然此前的紅黑樹合法,故作為紅節點p的父親,g必然存在且為黑色。

    此時的g,必然存在,否則作為樹根的節點p不可能為紅色;并且g作為紅色節點p的父親,其必然為黑色的

    在下面的過程中,僅僅有x p g這三個節點還不夠,因此,還需要一個額外的節點,即p的兄弟(x的叔叔)u。

    ??以下,視節點u的顏色不同(若u不存在,其顏色也視為黑,這符合之前外部節點的顏色定義),分兩類情況分別處置。

    1) u為黑色~

    ??u為黑色時,具體來說,對應四種結構.

    ??此時x的兄弟和兩個孩子的黑高度必然都與u的黑高度相等。

    a) LL型~

    在原來的樹中,插入了新節點x。構成下圖所示的結構。

    此時,可以利用B樹來理解,不妨先將紅黑樹,經過提升變換,提升為對應的(2,4)B樹。

    從B樹的結構可以看出,其不滿足先前提升變換的四種情況中的任何一種。
    因此,要想其滿足提升變換的四種情況,最簡單的做法,就是將p與g互換顏色,讓對應的(2,4)B樹變成下圖所示形式

    再將對應的(2,4)B樹還原成紅黑樹,即為

    即原來的 x 變成 a,原來的 p 變成 b ,原來的 g 變成 c 。
    但也注意到,相應的孩子節點的位置也發生了新的變化。

    ??因此,如何做到這樣的變化呢?此時不妨想想在本系列文章第三部分定義的AVL中的connect34算法,其對應的形狀也是這樣的形狀

    ??沒錯,只要我們將對應的x p g按照connect34的形式進行重構,就可以達到目的。

    b) RR型~

    ??同LL型一樣處理,不多贅述。

    c) LR型~

    ??在原來的樹中,插入了新節點x。構成下圖所示的結構。此時仍然滿足x的兄弟和兩個孩子的黑高度必然都與u的黑高度相等這個條件。

    此時,同樣可以利用B樹來理解,不妨先將紅黑樹,經過提升變換,提升為對應的(2,4)B樹。

    ??情況總是驚人的相似,可以發現,現在的形狀的調整方式,不正是同LL型的調整方式一模一樣么?只是x p g的相對位置有所變化。因此,也是需要進行connect34重構。

    d) RL型~

    ??同LR型一樣處理,不多贅述。

    2) u為紅色~

    ??u為紅色時,具體來說,對應四種結構

    ??此時,u的左、右孩子均為黑色(可能為空),其黑高度必與x的兄弟以及兩個孩子相等。

    a) LL型~

    在原來的樹中,插入了新節點x。構成下圖所示的結構。

    此時,同樣可以利用B樹來理解,不妨先將紅黑樹,經過提升變換,提升為對應的(2,4)B樹。

    在介紹LR型的時候,會展示怎么處理這種情況。

    b) RR型~

    ??同LL型一樣處理,不多贅述。

    c) LR型~

    ??在原來的樹中,插入了新節點x。構成下圖所示的結構。此時仍然滿足x的兄弟和兩個孩子的黑高度必然都與u的黑高度相等這個條件。

    此時,同樣可以利用B樹來理解,不妨先將紅黑樹,經過提升變換,提升為對應的(2,4)B樹。

    ??可以看到,提升變換之后,其這個大節點的關鍵碼數目,均必然為4個,超出了4階B樹的個數限制(4階B樹的一個大節點的關鍵碼數最多只能有3個)。所以可以仿照B樹的情況,進行一次上溢。同時進行染色以滿足原來B樹提升變換后的四種形態。(問號節點中必然有一個為黑,按照紅黑樹的提升變換,只有當g染成紅時才可以進行提升變換)

    從紅黑樹的角度來看,對比沒有變換之前


    ??從宏觀上來看,對于紅黑樹而言,只需要將p u的顏色由紅色變成黑色,并且若g不為根節點的話,就將g染色成紅色。當然,若g此時就是根節點,其強制變成黑色。

    ??同樣,由于g變成了紅色,所以還需要繼續判斷g的父親是否是紅色,因此要繼續進行雙紅修復。最壞的情況,可能要持續到根節點。(由x到g,上升了兩層)。累計最多迭代logn次。

    d) RL型~

    ??同LR型一樣處理,不多贅述。

    3) 求當前節點的叔叔代碼~

    static inline BinNodePtr uncle(const BinNodePtr& x) {/*獲取x的叔叔*/return IsLChild(x->_parent) ? x->_parent->_parent->_rchild : x->_parent->_parent->_lchild; }

    4) 雙紅修復代碼遞歸版~

    ??注意要是已經遞歸到樹根,則樹根強制轉黑

    template<typename T>void RedBlack<T>::solveDoubleRed(BinNode<T>* x){if (IsRoot(x)) {//若已遞歸到樹根,則樹根轉黑,整樹高度也隨之遞增this->_root->_color = RBColor::BLACK;this->_root->_height++;return;}//否則x的父親必然存在BinNode<T>* p = x->_parent;//x的父親if (IsBlack(p))//如果x的父親為黑,則終止調整return;//否則x的父親必然為紅,則BinNode<T>* g = p->_parent;//x的祖父必然存在,并且,其顏色必然為黑色BinNode<T>* u = uncle(x);//x的叔叔,可能為空節點if (IsBlack(u)) {//當u為黑色時(u為空時,也為黑色)if (IsLChild(x) == IsLChild(p))p->_color = RBColor::BLACK;elsex->_color = RBColor::BLACK;g->_color = RBColor::RED;/// 以上雖保證總共兩次染色,但因增加了判斷而得不償失/// 在旋轉后將根置黑、孩子置紅,雖需三次染色但效率更高BinNode<T>*& newNode = this->FromParentTo(g);//先記錄祖父的父親的孩子指針newNode = this->rotateAt(x);/*對x進行調整,調整之后的返回值必然為調整之后的局部子樹的樹根位置,此時,只需要將此樹根作為原來祖父的父親的孩子既可,當然,高度也隨之更新*/return;//只要旋轉了一次,就調整完整,退出循環}else {//若u為紅色p->_color = RBColor::BLACK;//父親此時必然為紅色,將其轉黑p->_height++;u->_color = RBColor::BLACK;//叔叔此時必然為紅色,將其轉黑u->_height++;if (!IsRoot(g))//如果祖父不為根節點,就轉紅g->_color = RBColor::RED;solveDoubleRed(g);//遞歸用}}

    5) 雙紅修復代碼迭代版~

    ??為了方便理解,我將遞歸的部分變成了注釋,并未進行刪除,方便讀者比對,迭代版中,不僅將尾遞歸轉換成了迭代,也將染色的效率進行了優化。

    template<typename T> void RedBlack<T>::solveDoubleRed(BinNode<T>* x) {while (true) {if (IsRoot(x)) {//若已迭代到樹根,則樹根轉黑,整樹高度也隨之遞增this->_root->_color = RBColor::BLACK;this->_root->_height++;return;}//否則x的父親必然存在BinNode<T>* p = x->_parent;//x的父親if (IsBlack(p))//如果x的父親為黑,則終止調整return;//否則x的父親必然為紅,則BinNode<T>* g = p->_parent;//x的祖父必然存在,并且,其顏色必然為黑色BinNode<T>* u = uncle(x);//x的叔叔,可能為空節點if (IsBlack(u)) {//當u為黑色時(u為空時,也為黑色)//if (IsLChild(x) == IsLChild(p))// p->_color = RBColor::BLACK;//else// x->_color = RBColor::BLACK;//g->_color = RBColor::RED;/// 以上雖保證總共兩次染色,但因增加了判斷而得不償失/// 在旋轉后將根置黑、孩子置紅,雖需三次染色但效率更高BinNode<T>*& newNode = this->FromParentTo(g);//先記錄祖父的父親的孩子指針newNode = this->rotateAt(x);/*對x進行調整,調整之后的返回值必然為調整之后的局部子樹的樹根位置,此時,只需要將此樹根作為原來祖父的父親的孩子既可,當然,高度也隨之更新*///重染色/*能省去之前的判斷*/newNode->_color = RBColor::BLACK;newNode->_lchild->_color = RBColor::RED;newNode->_rchild->_color = RBColor::RED;return;//只要旋轉了一次,就調整完整,退出循環}else {//若u為紅色p->_color = RBColor::BLACK;//父親此時必然為紅色,將其轉黑p->_height++;u->_color = RBColor::BLACK;//叔叔此時必然為紅色,將其轉黑u->_height++;if (!IsRoot(g))//如果祖父不為根節點,就轉紅g->_color = RBColor::RED;//solveDoubleRed(g);//遞歸用x = g;//將x變成其祖父,進入迭代循環。}} }

    6) 雙紅修復的復雜度~

    ??鄧老師已經用一個流程圖和一個表格,幫助我們詳細地分析了雙紅修復算法的復雜度。其中zag,zig是左右旋(也就是我們的connect34重構)

    RR代表雙紅


    ??可見,對于u為黑的情況,只需做一輪修正;u為紅的情況雖有可能需要反復修正,但由于修正位置的高度會嚴格單調上升,故總共也不過O(logn)輪。另外從該表也可看出,每一輪修正只涉及到常數次的節點旋轉或染色操作。

    ??因此,節點插入之后的雙紅修正,累計耗時不會超過O(logn)。即便計入此前的關鍵碼查找以及節點接入等操作,紅黑樹的每次節點插入操作,都可在O(logn)時間內完成。

    (五)紅黑樹的刪除~

    ??紅黑樹的刪除算法,本質同BST,AVL的刪除。在刪除節點方面。兩者沒什么區別,唯一的區別即高度的更新方式不同。因此,可以調用在BST中設定的給AVL的刪除接口removeAt全局函數。

    現在我們繼續來看看removeAt函數的作用

    定義在BST中的removeAt函數

    template<typename T>//適用于AVL Splay,RedBlack等,必須這么設計,才能做到完美刪除,且保持BST的性質 static BinNode<T>* removeAt(BinNode<T>*& x, BinNode<T>*& hot) {//這里x必須用引用,才不會使指針亂指using BinNodePtr = BinNode<T>*; //記錄x的地址里面保存的值,若刪除temp里面的值,即刪除x里面的值,但x的本身地址不會影響temp,反之亦然。BinNodePtr temp = x;//替代被刪除節點的接替者,一般為被刪除節點的左孩子或者右孩子,而不是x的左孩子或者右孩子BinNodePtr replacer = nullptr;if (!HasLChild(x)) {//如果x沒有左孩子,或者x左右孩子均無,則將x的右孩子作為x,并將接替者設為x的右孩子x = x->_rchild;replacer = x;}else if (!HasRChild(x)) {//如果x沒有右孩子,則將x的左孩子作為x,并將接替者設為x的左孩子x = x->_lchild;replacer = x;}else {temp = temp->succ();//取得中序遍歷的后繼//這個后繼必將沒有左孩子std::swap(x->_data, temp->_data);//交換對應的值if (temp->_parent == x) {//如果后繼的父親是原來的x,后繼必然為x的右孩子replacer = temp->_rchild; //就將后繼的右孩子作為父親的右孩子temp->_parent->_rchild = replacer;}else {//如果后繼的父親不是原來的x,后繼必然為某一節點的左孩子replacer = temp->_rchild;temp->_parent->_lchild=replacer;//就將后繼的右孩子作為這個節點左孩子}}//hot即被刪除節點的父親。而temp正是要刪除的節點。hot = temp->_parent;if (replacer)//若replacer存在,則必須將其父指針指向hot。不然如同x->_rchild的父親指向的還是原來的replacer->_parent = hot;//釋放原來x所指的堆區的數據,或者x的后繼的堆區的數據release(temp->_data);release(temp);return replacer; }

    1.再探removeAt語義~

    ??從removeAt的語義(3種刪除的情況)來看,刪除的節點可能是x,可能是x的后繼。

    (1)removeAt的第一種和第二種情況~

    ??從removeAt的第一種和第二種情況來看,刪除的節點必然為x。即表明此時的x要么沒有孩子,要么只有一個孩子。即此時x必然有一個空孩子(也一定是黑孩子)。

    下面圖的情況,全部是用來刪除節點x ?? 刪除節點1,實際刪除的也是1(removeAt的第一種情況)

    刪除節點1,實際刪除的也是1(removeAt的第一種情況)

    刪除節點1,實際刪除的也是1(removeAt的第二種情況)


    ??可以看到,此時x必然有一個空孩子(也一定是黑孩子)。

    (2)removeAt的第三種情況~

    ??從removeAt的第三種情況來看,刪除的節點為x的后繼,由后繼的定義可知,這個后繼必然沒有左孩子(這種后繼的情況,必然屬于在本系列文章第一節談到的求后繼的第一種情況,并且我用紅字標明了這種后繼一定沒有左孩子),不然不可能刪這個后繼。

    刪除節點10,實際刪除的是15(removeAt的第三種情況)


    ??可以看到,15必然沒有左孩子,其左孩子為空節點(黑節點)。

    因此,x的后繼必然有一個空孩子(也是黑孩子)。

    (3)結論~

    綜合(1)(2)可以得到一個非常重要的結論:

    無論被刪除的是x還是x的后繼,被刪除節點,都必然有一個空孩子(也是黑孩子)。

    (4)removeAt其他細節~

    ??1. 在removeAt函數中,交換x與后繼的值時,也只是交換了它們的data值,并非交換了它們的所有東西,因此,x的原來的顏色,和其后繼的顏色均沒變。

    std::swap(x->_data, temp->_data);//交換對應的值

    ??2.在刪除完成后_hot節點也指向了被刪除節點的父親節點。

    //hot即被刪除節點的父親。而temp正是要刪除的節點。 hot = temp->_parent;

    ??3.removeAt的返回值是replacer,即被刪除節點的接替者。

    BinNodePtr replacer//替代被刪除節點的接替者,一般為被刪除節點的左孩子或者右孩子,可能為空

    2.紅黑樹的刪除~

    (1)刪除情況分析~

    ??對于刪除時節點(可能是x被刪,也可能是其后繼被刪)的顏色進行分類討論的話,無外乎就五種情況。

    (1)被刪除后,原樹沒有任何節點,刪除即可完成。

    (2)被刪除的是根節點,只需要將其接替者replacer染成黑色,并更新高度既可,刪除完成。

    (3)實際被刪除節點x為紅色,其必然只有黑孩子和黑父親,并且w必然為空(根據removeAt的結論),此時只需將r接替x的位置既可。(當然r也可能為空)

    x代表被刪除節點,w代表必然為空的那個節點,r代表replacer也就是被刪除節點的接替者。p為x的父親


    ??此時,毫無例外,刪除x對原樹的黑高度肯定沒有影響,因此直接刪除既可。刪除完成后,即可結束。

    (4)實際被刪除節點為黑色,w同樣也為空(根據removeAt的結論)。若r為紅色,此時,只需要在r接替x的位置之后,將r轉成黑色,那么原樹的黑高度也必然恢復,刪除完成。

    (5)實際被刪除節點為黑色,w同樣也為空(根據removeAt的結論)。若r為黑,即出現雙黑情況,則需要做進一步的調整變換。(當然,這種情況,也必然包含了r為空孩子的情況)

    (2)刪除代碼~

    template<typename T> bool RedBlack<T>::remove(const T& data) {BinNode<T>*& x = this->search(data);//找有沒有這個節點,如果沒有,則返回false,記住用引用if (!x)return false;BinNode<T>* replacer = removeAt(x, this->_hot);//調用在BST定義的全局靜態函數removeAt,返回被刪除節點的接替者,同時更新_hot--this->_size;//更新規模//1.如果這個被刪除節點是樹中唯一節點,則直接返回if (this->_size==0) {this->_root = nullptr;//將根節點置空return true;}//2.如果被刪除節點為根節點,則_hot必然為空//但如果進行到此,說明此時_root必然不為空,不然上一就會退出if (this->_hot == nullptr) {this->_root->_color = RBColor::BLACK;//就將此時的根節點直接染成黑色updateHeight(this->_root);//并更新根節點的高度return true;}//如果進行到此,說明被刪除節點必然存在,并且不為根節點。_hot也必然存在/*3.如果_hot的黑高度不變則返回*//*此時也必然包括了被刪除節點為紅色節點的情況,若為紅色,則刪除對高度沒有影響*//*當然,也包括了雙黑的可能情況*/if (IsBlackHeightBalanced(this->_hot))return true;/*4.如果_hot的黑高度變了,說明被刪除節點必然為黑色*/if (IsRed(replacer)) {//就看x的接替者是不是紅色,如果是紅色,將其染成黑色,就必然可以使樹的高度恢復。replacer->_color = RBColor::BLACK;replacer->_height++;return true;}/*5.如果進行到此,就必然說明被刪除節點和replacer均為黑色節點(replacer可能為空),此時,就需要進行雙黑缺陷判斷*//*要進行到這里的條件即為被刪除節點的父親的黑高度變了,并且被刪除節點的接替者也為黑色時。*/solveDoubleBlack(replacer);return true; }

    (3)判斷黑高度是否平衡代碼~

    在紅黑樹的刪除過程中,我們需要判斷黑高度是否平衡。

    static constexpr bool IsBlackHeightBalanced(const BinNodePtr& x) {//判斷是否需要更新黑高度bool is_L_C_Equal = (stature(x->_lchild) == stature(x->_rchild));int rbHeight = (IsRed(x) ? stature(x->_lchild) : stature(x->_lchild) + 1);//對于rbHeight的計算而言,取左孩子還是右孩子,均一樣bool is_Height_Equal = (x->_height == rbHeight);return is_L_C_Equal && is_Height_Equal;//只要有一個為假,即為假//所以只要左孩子和右孩子高度相等,或者x沒有高度變化,就黑高度平衡 }

    (六)雙黑缺陷~

    ??若被刪除節點和其接替者(可能為空)均為黑。則顯然,為了保持紅黑樹的平衡性,原來被刪除節點必然有一個非空兄弟(其孩子可能均為空),不然黑高度就無法維持。

    ??不妨將被刪除節點x的兄弟記作s。被刪除節點的父親記作p。無論哪一個,顏色都不確定。

    ??因此,分s和p的顏色情況,分四種情況來討論。

    (1)s為黑,其至少有一個紅孩子~

    ??先以s為p的左孩子,x為p的右孩子來處理(對稱情況處理方式完全相同)
    ??左為紅黑樹,右為對應的B樹

    ??此時刪除了節點x,類似于B樹的處理方式,由于其左兄弟有一個多余的關鍵碼,所以要從其左兄弟借一個關鍵碼。調整后為(當然,調整之后,要滿足提升變換的四種情況,因此需要重染色)

    左側是B樹,右側是紅黑樹


    ??并且圖(b)的結構也是令人十分熟悉,沒錯,也就是connect34重構。
    ??因此,從紅黑樹的角度來看,此過程等效于對節點t,s,p進行3+4重構。

    ??位置調整好后,再進行重染色,即把t,p染成黑色,s繼續沿用之前p的顏色。并且在此過程中,r的顏色沒有發生變化。

    ??顯然,調整完之后,紅黑樹的高度得以復原。因此調整完畢。

    (2)s為黑,s的兩個孩子為黑,p為紅~

    ??先以s為p的左孩子,x為p的右孩子來處理(對稱情況處理方式完全相同)
    ??左為紅黑樹,右為對應的B樹

    (p的位置不可能是中間,只可能是左邊或者右邊) ??

    ??此時的B樹,被刪除的x無法從s中借關鍵碼,所以只有父親下溢。為保持紅黑樹的性質不變,因此下溢后,只需將s和p的顏色互換,就能保持性質。

    (p的左右節點中有且僅有一個黑色關鍵碼,因此p下溢,不會造成對應B樹結構的破壞) ??

    ??因此,從紅黑樹的角度來看,只需將s與p的顏色進行互換,就能使紅黑樹的高度得到復原。

    (3)s為黑,s的兩個孩子為黑,p為黑~

    ??先以s為p的左孩子,x為p的右孩子來處理(對稱情況處理方式完全相同)
    ??左為紅黑樹,右為對應的B樹

    ??由于刪除了x,s也沒有足夠的關鍵碼,因此,只能p下溢。并且由于p所在層次,必然只有p一個關鍵碼,因此,p的下溢,必將導致上層下溢。

    ??下溢之后,將s置為紅色,對應的紅黑樹為

    ??因此,從紅黑樹的角度來看,即把s由黑轉紅。

    ??由于p是下溢過來的,所以需要做進一步的檢查,此時等效于原樹中p的黑父親剛刪除,因此可以看做又是一次雙黑缺陷。所以需要再次做迭代循環。

    ??這也是雙黑修正過程中,需要再次迭代的唯一可能。(可能進入情況1 2 3 4中任何一種)。

    (4)s為紅,s的兩個孩子必然為黑,p必然為黑~

    ??先以s為p的左孩子,x為p的右孩子來處理(對稱情況處理方式完全相同)
    ??左為紅黑樹,右為對應的B樹

    ??從B樹的角度來看,此時可以將p下溢,并將s’轉紅,s轉黑,但這樣會導致以s’為根的子樹的高度變化,并且由于x被刪除,以x為根的子樹的高度必然也下降。所以,如果僅僅這么調整,會造成兩顆子樹的高度減少,使得情況變得更加復雜。

    ??而先輩們已經有了很好的解決方式。

    ??即先將s與p互換顏色,得到左圖所示的B樹,將其轉換為紅黑樹為右圖所示。

    ??從紅黑樹的角度來看,這一轉換對應于以節點p為軸做一次旋轉,并交換p與s的顏色。

    ??可以發現,經過上述處理后,雙黑缺陷依然存在,而且缺陷位置的高度也未上升。但此次變換并非沒有意義,仔細觀察圖b可以發現,被刪除節點x有了一個新兄弟s’,并且s’必然為黑

    ??并且,調整之后,可以發現a與b所示的紅黑樹,完全等價。

    ??再仔細觀察,不難發現,此時x p s’對應的情況,不正是之前雙黑修復過程中出現的情況(1)與(2)么

    ??所以,只需要將調整之后的紅黑樹,再進行一次雙黑修復,就必然可以修復高度。

    (5)雙黑修復遞歸版~

    template<typename T> void RedBlack<T>::solveDoubleBlack(BinNode<T>* replacer) {BinNode<T>* p = replacer ? replacer->_parent : this->_hot;if (p == nullptr)return;//如果replacer的父親為空,則返回/*由下面的情況來分析,無論哪種情況,遞歸的這個節點,必然為黑色*/所以不需要考慮將根節點強轉黑色BinNode<T>* sibling = (replacer == p->_lchild) ? p->_rchild : p->_lchild;//原來x的兄弟,也就是replacer此時的兄弟if (IsBlack(sibling)) {BinNode<T>* s_Red_child = nullptr;//sibling的紅孩子(若左右孩子皆為紅,則左者優先;皆黑時為nullptr)if (IsRed(sibling->_rchild))//需要判斷sibling是不是空指針s_Red_child = sibling->_rchild;//右孩子if (IsRed(sibling->_lchild))s_Red_child = sibling->_lchild;//左孩子 /*1.第一種情況,黑s有紅孩子*/if (s_Red_child != nullptr) {//如果sibling有紅孩子RBColor oldColor = p->_color;//備份父親的顏色/*接下來對s的紅孩子,s以及p進行3+4重構*//*根據3+4重構后的定義,其返回的節點為根節點指針,這個根節點的名字不妨設為newNode*/BinNode<T>*& newNode = this->FromParentTo(p);//首先記錄父親的 父親的孩子的指針newNode = this->rotateAt(s_Red_child);//3+4重構//對3+4重構后的節點進行重染色if (HasLChild(newNode)) {newNode->_lchild->_color = RBColor::BLACK;updateHeight(newNode->_lchild);}if (HasRChild(newNode)) {newNode->_rchild->_color = RBColor::BLACK;updateHeight(newNode->_rchild);}newNode->_color = oldColor;//新子樹根節點繼承原根節點的顏色updateHeight(newNode);//更新高度/*至此,就調整完畢,紅黑樹恢復平衡*/}/*黑s沒有紅孩子,及其孩子均為黑色(可能為空),對其父親是否為紅色進行判斷*/else {sibling->_color = RBColor::RED;//無論父親是否為紅色,都需要把s設為紅色sibling->_height--; /*2.黑s只有黑孩子(可能為空,并且其父親為紅色*/if (IsRed(p)) {p->_color = RBColor::BLACK;//直接將父親設定為黑色,父親的高度必然沒有發生變化。//因為p原來為紅,現在由于兩個孩子高度都減了一,所以將其變成黑色后,其高度就恢復了原來的高度/*至此,就調整完畢,紅黑樹恢復平衡*/} /*3.黑s只有黑孩子(可能為空,并且其父親為黑色*/else {p->_height--;//相當于p的父親被刪,然后對p是父親的replacer,因此,對p進行遞歸既可。solveDoubleBlack(p);//用遞歸時用/*之后可能進入1 2 3 4四種情況中的任何一種,最壞可能到根*/}}} /*4.s為紅,此時其必然只有黑孩子(黑孩子可能均為空),當然s的父親p此時也必然為黑*/else {sibling->_color = RBColor::BLACK;//將s和p的顏色互換p->_color = RBColor::RED;//取與s同側的孩子BinNode<T>* s_child = IsLChild(sibling) ? sibling->_lchild : sibling->_rchild;this->_hot = p;//首先將p的父親記錄起來BinNode<T>*& newNode = this->FromParentTo(p);//首先記錄p的 父親的孩子的指針newNode = this->rotateAt(s_child);//將s_child,s與p 進行3+4重構/*調整之后,樹的局部結構就發生了變化*/solveDoubleBlack(replacer);//用遞歸時用//由第四種情況的分析,可知,只需要修復重構后的replacer就可以//并且之后只有可能進入第一種和第二種情況,必然不可能進入第三種情況} }

    (6)雙黑修復迭代版~

    ??為了方便理解,我將遞歸的部分變成了注釋,并未進行刪除,方便讀者比對。

    template<typename T> void RedBlack<T>::solveDoubleBlack(BinNode<T>* replacer) {while (true) {BinNode<T>* p = replacer ? replacer->_parent : this->_hot;if (p == nullptr)return;//如果replacer的父親為空,則返回/*由下面的情況來分析,無論哪種情況,遞歸的這個節點,必然為黑色*/所以不需要考慮將根節點強轉黑色BinNode<T>* sibling = (replacer == p->_lchild) ? p->_rchild : p->_lchild;//原來x的兄弟,也就是replacer此時的兄弟if (IsBlack(sibling)) {BinNode<T>* s_Red_child = nullptr;//sibling的紅孩子(若左右孩子皆為紅,則左者優先;皆黑時為nullptr)if (IsRed(sibling->_rchild))//需要判斷sibling是不是空指針s_Red_child = sibling->_rchild;//右孩子if (IsRed(sibling->_lchild))s_Red_child = sibling->_lchild;//左孩子 /*1.第一種情況,黑s有紅孩子*/if (s_Red_child != nullptr) {//如果sibling有紅孩子RBColor oldColor = p->_color;//備份父親的顏色/*接下來對s的紅孩子,s以及p進行3+4重構*//*根據3+4重構后的定義,其返回的節點為根節點指針,這個根節點的名字不妨設為newNode*/BinNode<T>*& newNode = this->FromParentTo(p);//首先記錄父親的 父親的孩子的指針newNode = this->rotateAt(s_Red_child);//3+4重構//對3+4重構后的節點進行重染色if (HasLChild(newNode)) {newNode->_lchild->_color = RBColor::BLACK;updateHeight(newNode->_lchild);}if (HasRChild(newNode)) {newNode->_rchild->_color = RBColor::BLACK;updateHeight(newNode->_rchild);}newNode->_color = oldColor;//新子樹根節點繼承原根節點的顏色updateHeight(newNode);//更新高度/*至此,就調整完畢,紅黑樹恢復平衡*/return;//用遞歸的時候注釋掉}/*黑s沒有紅孩子,及其孩子均為黑色(可能為空),對其父親是否為紅色進行判斷*/else {sibling->_color = RBColor::RED;//無論父親是否為紅色,都需要把s設為紅色sibling->_height--; /*2.黑s只有黑孩子(可能為空,并且其父親為紅色*/if (IsRed(p)) {p->_color = RBColor::BLACK;//直接將父親設定為黑色,父親的高度必然沒有發生變化。//因為p原來為紅,現在由于兩個孩子高度都減了一,所以將其變成黑色后,其高度就恢復了原來的高度/*至此,就調整完畢,紅黑樹恢復平衡*/return;//用遞歸的時候注釋掉} /*3.黑s只有黑孩子(可能為空,并且其父親為黑色*/else {p->_height--;//相當于p的父親被刪,然后對p是父親的replacer,因此,對p進行遞歸既可。//solveDoubleBlack(p);//用遞歸時用replacer = p;//將replacer變成p進入迭代循環//用遞歸的時候注釋掉/*之后可能進入1 2 3 4四種情況中的任何一種,最壞可能到根*/}}} /*4.s為紅,此時其必然只有黑孩子(黑孩子可能均為空),當然s的父親p此時也必然為黑*/else {sibling->_color = RBColor::BLACK;//將s和p的顏色互換p->_color = RBColor::RED;//取與s同側的孩子BinNode<T>* s_child = IsLChild(sibling) ? sibling->_lchild : sibling->_rchild;this->_hot = p;//首先將p的父親記錄起來BinNode<T>*& newNode = this->FromParentTo(p);//首先記錄p的 父親的孩子的指針newNode = this->rotateAt(s_child);//將s_child,s與p 進行3+4重構/*調整之后,樹的局部結構就發生了變化*///solveDoubleBlack(replacer);//用遞歸時用//由第四種情況的分析,可知,只需要修復重構后的replacer就可以//并且之后只有可能進入第一種和第二種情況,必然不可能進入第三種情況}} }

    (7)雙黑修復復雜度~

    ??鄧老師已經用一個流程圖和一個表格,幫助我們詳細地分析了雙黑修復算法的復雜度。其中zag,zig是左右旋(也就是我們的connect34重構)

    ??其中涉及的重構、染色等局部操作,均可在常數時間內完成,故為了估計整個雙黑修正過程的時間復雜度,也只需統計這些操作各自的累計執行次數。

    ??情況BB-2-B雖可能需要反復修正,但由于待修正位置的高度嚴格單調上升,累計也不致過O(logn)輪,故雙黑修正過程總共耗時不超過O(logn)。

    ??即便計入此前的關鍵碼查找和節點摘除操作,紅黑樹的節點刪除操作總是可在O(logn)時間內完成。

    ??一旦在某步迭代中做過節點的旋轉調整,整個修復過程便會隨即完成。因此與雙紅修正一樣,雙黑修正的整個過程,也僅涉及常數次的拓撲結構調整操作。

    ??這同樣也是紅黑樹與AVL樹之間最本質的差別。(在本文章的開頭,就說明了AVL的不足就在于刪除時可能要多達logn次調整。)

    五、完整RedBlack.h~

    #pragma once #include "BinNode.h" #include "BST.h"namespace my_redblack {using mytree::BinNode;using mytree::BST;using mytree::RBColor;using mytree_marcro::stature;using mytree_marcro::IsRoot;using mytree_marcro::IsLChild;using mytree_marcro::HasLChild;using mytree_marcro::HasRChild;template<typename T=int>class RedBlack :public BST<T> {protected:using BinNodePtr = BinNode<T>*;protected:void solveDoubleRed(BinNode<T>* x);//雙紅修正void solveDoubleBlack(BinNode<T>* replacer);//雙黑修正constexpr int updateHeight(BinNode<T>* x)const override;//更新高度public:BinNode<T>* insert(const T& data)override;//插入重寫bool remove(const T& data)override;//刪除重寫/*查找沿用BST的查找*//*遍歷沿用BinTree的遍歷*/protected:static constexpr bool IsBlack(const BinNodePtr& x) {//判黑//當然x為空,也為黑色return ((!x) || (RBColor::BLACK == x->_color));}static constexpr bool IsRed(const BinNodePtr& x) {//非黑即紅return !IsBlack(x);}static constexpr bool IsBlackHeightBalanced(const BinNodePtr& x) {//判斷是否需要更新黑高度bool is_L_C_Equal = (stature(x->_lchild) == stature(x->_rchild));int rbHeight = (IsRed(x) ? stature(x->_lchild) : stature(x->_lchild) + 1);//對于rbHeight的計算而言,取左孩子還是右孩子,均一樣bool is_Height_Equal = (x->_height == rbHeight);return is_L_C_Equal && is_Height_Equal;//只要有一個為假,即為假//所以只要左孩子和右孩子高度相等,或者x沒有高度變化,就黑高度平衡 }static inline BinNodePtr uncle(const BinNodePtr& x) {/*獲取x的叔叔*/return IsLChild(x->_parent) ? x->_parent->_parent->_rchild : x->_parent->_parent->_lchild;}};//class RedBlacktemplate<typename T>constexpr int RedBlack<T>::updateHeight(BinNode<T>* x) const//由于stature視空節點高度為-1,所以height會比黑高度少一{x->_height = std::max(stature(x->_lchild), stature(x->_rchild));//孩子一般黑高度相等,除非出現雙黑return IsBlack(x) ? x->_height++ : x->_height;//若當前節點為黑,則計入黑高度}template<typename T>void RedBlack<T>::solveDoubleRed(BinNode<T>* x){while (true) {if (IsRoot(x)) {//若已迭代到樹根,則樹根轉黑,整樹高度也隨之遞增this->_root->_color = RBColor::BLACK;this->_root->_height++;return;}//否則x的父親必然存在BinNode<T>* p = x->_parent;//x的父親if (IsBlack(p))//如果x的父親為黑,則終止調整return;//否則x的父親必然為紅,則BinNode<T>* g = p->_parent;//x的祖父必然存在,并且,其顏色必然為黑色BinNode<T>* u = uncle(x);//x的叔叔,可能為空節點if (IsBlack(u)) {//當u為黑色時(u為空時,也為黑色)//if (IsLChild(x) == IsLChild(p))// p->_color = RBColor::BLACK;//else// x->_color = RBColor::BLACK;//g->_color = RBColor::RED;/// 以上雖保證總共兩次染色,但因增加了判斷而得不償失/// 在旋轉后將根置黑、孩子置紅,雖需三次染色但效率更高BinNode<T>*& newNode = this->FromParentTo(g);//先記錄祖父的父親的孩子指針newNode = this->rotateAt(x);/*對x進行調整,調整之后的返回值必然為調整之后的局部子樹的樹根位置,此時,只需要將此樹根作為原來祖父的父親的孩子既可,當然,高度也隨之更新*///重染色/*能省去之前的判斷*/newNode->_color = RBColor::BLACK;newNode->_lchild->_color = RBColor::RED;newNode->_rchild->_color = RBColor::RED;return;//只要旋轉了一次,就調整完整,退出循環}else {//若u為紅色p->_color = RBColor::BLACK;//父親此時必然為紅色,將其轉黑p->_height++;u->_color = RBColor::BLACK;//叔叔此時必然為紅色,將其轉黑u->_height++;if (!IsRoot(g))//如果祖父不為根節點,就轉紅g->_color = RBColor::RED;//solveDoubleRed(g);//遞歸用x = g;//將x變成其祖父,進入迭代循環。}}}template<typename T>BinNode<T>* RedBlack<T>::insert(const T& data){BinNode<T>*& x = this->search(data);//沿用BST的查找//并更新_hot//用引用接收if (x)//如果節點存在,則返回return x;x = new BinNode<T>(data, this->_hot, nullptr, nullptr, -1);//設定黑高度-1,并默認節點為紅色this->_size++;solveDoubleRed(x);//雙紅修正//x此時必為紅return x;}template<typename T>void RedBlack<T>::solveDoubleBlack(BinNode<T>* replacer){while (true) {BinNode<T>* p = replacer ? replacer->_parent : this->_hot;if (p == nullptr)return;//如果replacer的父親為空,則返回/*由下面的情況來分析,無論哪種情況,遞歸的這個節點,必然為黑色*/所以不需要考慮將根節點強轉黑色BinNode<T>* sibling = (replacer == p->_lchild) ? p->_rchild : p->_lchild;//原來x的兄弟,也就是replacer此時的兄弟if (IsBlack(sibling)) {BinNode<T>* s_Red_child = nullptr;//sibling的紅孩子(若左右孩子皆為紅,則左者優先;皆黑時為nullptr)if (IsRed(sibling->_rchild))//需要判斷sibling是不是空指針s_Red_child = sibling->_rchild;//右孩子if (IsRed(sibling->_lchild))s_Red_child = sibling->_lchild;//左孩子/*1.第一種情況,黑s有紅孩子*/if (s_Red_child != nullptr) {//如果sibling有紅孩子RBColor oldColor = p->_color;//備份父親的顏色/*接下來對s的紅孩子,s以及p進行3+4重構*//*根據3+4重構后的定義,其返回的節點為根節點指針,這個根節點的名字不妨設為newNode*/BinNode<T>*& newNode = this->FromParentTo(p);//首先記錄父親的 父親的孩子的指針newNode = this->rotateAt(s_Red_child);//3+4重構//對3+4重構后的節點進行重染色if (HasLChild(newNode)) {newNode->_lchild->_color = RBColor::BLACK;updateHeight(newNode->_lchild);}if (HasRChild(newNode)) {newNode->_rchild->_color = RBColor::BLACK;updateHeight(newNode->_rchild);}newNode->_color = oldColor;//新子樹根節點繼承原根節點的顏色updateHeight(newNode);//更新高度/*至此,就調整完畢,紅黑樹恢復平衡*/return;//用遞歸的時候注釋掉}/*黑s沒有紅孩子,及其孩子均為黑色(可能為空),對其父親是否為紅色進行判斷*/else {sibling->_color = RBColor::RED;//無論父親是否為紅色,都需要把s設為紅色sibling->_height--;/*2.黑s只有黑孩子(可能為空,并且其父親為紅色*/if (IsRed(p)) {p->_color = RBColor::BLACK;//直接將父親設定為黑色,父親的高度必然沒有發生變化。//因為p原來為紅,現在由于兩個孩子高度都減了一,所以將其變成黑色后,其高度就恢復了原來的高度/*至此,就調整完畢,紅黑樹恢復平衡*/return;//用遞歸的時候注釋掉}/*3.黑s只有黑孩子(可能為空,并且其父親為黑色*/else {p->_height--;//相當于p的父親被刪,然后對p是父親的replacer,因此,對p進行遞歸既可。//solveDoubleBlack(p);//用遞歸時用replacer = p;//將replacer變成p進入迭代循環//用遞歸的時候注釋掉/*之后可能進入1 2 3 4四種情況中的任何一種,最壞可能到根*/}}}/*4.s為紅,此時其必然只有黑孩子(黑孩子可能均為空),當然s的父親p此時也必然為黑*/else {sibling->_color = RBColor::BLACK;//將s和p的顏色互換p->_color = RBColor::RED;//取與s同側的孩子BinNode<T>* s_child = IsLChild(sibling) ? sibling->_lchild : sibling->_rchild;this->_hot = p;//首先將p的父親記錄起來BinNode<T>*& newNode = this->FromParentTo(p);//首先記錄p的 父親的孩子的指針newNode = this->rotateAt(s_child);//將s_child,s與p 進行3+4重構/*調整之后,樹的局部結構就發生了變化*///solveDoubleBlack(replacer);//用遞歸時用//由第四種情況的分析,可知,只需要修復重構后的replacer就可以//并且之后只有可能進入第一種和第二種情況,必然不可能進入第三種情況}}}template<typename T>bool RedBlack<T>::remove(const T& data){BinNode<T>*& x = this->search(data);//找有沒有這個節點,如果沒有,則返回false,記住用引用if (!x)return false;BinNode<T>* replacer = removeAt(x, this->_hot);//調用在BST定義的全局靜態函數removeAt,返回被刪除節點的接替者,同時更新_hot--this->_size;//更新規模//1.如果這個被刪除節點是樹中唯一節點,則直接返回if (this->_size==0) {this->_root = nullptr;//將根節點置空return true;}//2.如果被刪除節點為根節點,則_hot必然為空//但如果進行到此,說明此時_root必然不為空,不然上一就會退出if (this->_hot == nullptr) {this->_root->_color = RBColor::BLACK;//就將此時的根節點直接染成黑色updateHeight(this->_root);//并更新根節點的高度return true;}//如果進行到此,說明被刪除節點必然存在,并且不為根節點。_hot也必然存在/*3.如果_hot的黑高度不變則返回*//*此時也必然包括了被刪除節點為紅色節點的情況,若為紅色,則刪除對高度沒有影響*//*當然,也包括了雙黑的可能情況*/if (IsBlackHeightBalanced(this->_hot))return true;/*4.如果_hot的黑高度變了,說明被刪除節點必然為黑色*/if (IsRed(replacer)) {//就看x的接替者是不是紅色,如果是紅色,將其染成黑色,就必然可以使樹的高度恢復。replacer->_color = RBColor::BLACK;replacer->_height++;return true;}/*5.如果進行到此,就必然說明被刪除節點和replacer均為黑色節點(replacer可能為空),此時,就需要進行雙黑缺陷判斷*//*要進行到這里的條件即為被刪除節點的父親的黑高度變了,并且被刪除節點的接替者也為黑色時。*/solveDoubleBlack(replacer);return true;}}//namespace my_redblack

    六、紅黑樹測試~

    1.插入測試代碼~

    #include<iostream> #include "RedBlack.h" using namespace std; using namespace my_redblack;template<typename BinNodePtr> void visite(BinNodePtr x) {cout << "數據為:" << x->_data << " ";if (x->_color == RBColor::RED) {cout << "顏色為:" << "紅" << " ";}else {cout << "顏色為:" << "黑" << " ";}cout << endl; } int main() {RedBlack r;for (int i = 0; i < 10; ++i) {r.insert(i);}cout << "層次遍歷為:" << endl;r.travLevel(visite<BinNode<int>*>);cout << endl;cout << "先序遍歷為:" << endl;r.travPre(visite<BinNode<int>*>);cout << endl;cout << "中序遍歷為:" << endl;r.travIn(visite<BinNode<int>*>);cout << endl;cout << "后序遍歷為:" << endl;r.travPost(visite<BinNode<int>*>);cout << endl;return 0; } 層次遍歷為: 數據為:3 顏色為:黑 數據為:1 顏色為:黑 數據為:5 顏色為:黑 數據為:0 顏色為:黑 數據為:2 顏色為:黑 數據為:4 顏色為:黑 數據為:7 顏色為:紅 數據為:6 顏色為:黑 數據為:8 顏色為:黑 數據為:9 顏色為:紅先序遍歷為: 數據為:3 顏色為:黑 數據為:1 顏色為:黑 數據為:0 顏色為:黑 數據為:2 顏色為:黑 數據為:5 顏色為:黑 數據為:4 顏色為:黑 數據為:7 顏色為:紅 數據為:6 顏色為:黑 數據為:8 顏色為:黑 數據為:9 顏色為:紅中序遍歷為: 數據為:0 顏色為:黑 數據為:1 顏色為:黑 數據為:2 顏色為:黑 數據為:3 顏色為:黑 數據為:4 顏色為:黑 數據為:5 顏色為:黑 數據為:6 顏色為:黑 數據為:7 顏色為:紅 數據為:8 顏色為:黑 數據為:9 顏色為:紅后序遍歷為: 數據為:0 顏色為:黑 數據為:2 顏色為:黑 數據為:1 顏色為:黑 數據為:4 顏色為:黑 數據為:6 顏色為:黑 數據為:9 顏色為:紅 數據為:8 顏色為:黑 數據為:7 顏色為:紅 數據為:5 顏色為:黑 數據為:3 顏色為:黑

    2.插入測試圖示~

    3.刪除測試代碼~

    #include<iostream> #include "RedBlack.h" using namespace std; using namespace my_redblack;template<typename BinNodePtr> void visite(BinNodePtr x) {cout << "數據為:" << x->_data << " ";if (x->_color == RBColor::RED) {cout << "顏色為:" << "紅" << " ";}else {cout << "顏色為:" << "黑" << " ";}cout << endl; } int main() {RedBlack r;for (int i = 0; i < 10; ++i) {r.insert(i);}cout << "中序遍歷為:" << endl;r.travIn(visite<BinNode<int>*>);cout << endl;for (int i = 0; i < 10; ++i) {r.remove(i);r.travIn(visite<BinNode<int>*>);cout << endl;}return 0; } 中序遍歷為: 數據為:0 顏色為:黑 數據為:1 顏色為:黑 數據為:2 顏色為:黑 數據為:3 顏色為:黑 數據為:4 顏色為:黑 數據為:5 顏色為:黑 數據為:6 顏色為:黑 數據為:7 顏色為:紅 數據為:8 顏色為:黑 數據為:9 顏色為:紅數據為:1 顏色為:黑 數據為:2 顏色為:紅 數據為:3 顏色為:黑 數據為:4 顏色為:黑 數據為:5 顏色為:黑 數據為:6 顏色為:黑 數據為:7 顏色為:黑 數據為:8 顏色為:黑 數據為:9 顏色為:紅數據為:2 顏色為:黑 數據為:3 顏色為:黑 數據為:4 顏色為:黑 數據為:5 顏色為:黑 數據為:6 顏色為:黑 數據為:7 顏色為:黑 數據為:8 顏色為:黑 數據為:9 顏色為:紅數據為:3 顏色為:黑 數據為:4 顏色為:紅 數據為:5 顏色為:黑 數據為:6 顏色為:黑 數據為:7 顏色為:紅 數據為:8 顏色為:黑 數據為:9 顏色為:紅數據為:4 顏色為:黑 數據為:5 顏色為:黑 數據為:6 顏色為:黑 數據為:7 顏色為:紅 數據為:8 顏色為:黑 數據為:9 顏色為:紅數據為:5 顏色為:黑 數據為:6 顏色為:紅 數據為:7 顏色為:黑 數據為:8 顏色為:黑 數據為:9 顏色為:紅數據為:6 顏色為:黑 數據為:7 顏色為:黑 數據為:8 顏色為:黑 數據為:9 顏色為:紅數據為:7 顏色為:黑 數據為:8 顏色為:黑 數據為:9 顏色為:黑數據為:8 顏色為:黑 數據為:9 顏色為:紅數據為:9 顏色為:黑

    4.刪除測試圖示~

    七、結語~

    本系列文章,總共6篇,分別介紹了

  • 基本二叉樹節點(1w9字)
  • 基本二叉樹類(6000字)
  • BST(1w2字)
  • AVL(1w1字)
  • B樹(1w5字)
  • 紅黑樹(2w8字)
  • ??其中B樹和紅黑樹的難度最大的,這兩種樹情況分析確實十分復雜,除非背下來,不然是不可能在短時間內一下就能分析出這么多情況,并且不發生遺漏的。

    ??在此,再次感謝鄧老師的教材和視頻,我才能夠掌握樹的核心框架。并且感謝發明這些樹的前輩們,多虧了他們的智慧,才有了這些高效的數據結構和算法的出現,提高了我們的計算機處理問題的能力。

    ??并且不知不覺,算上代碼,此系列文章也寫了將近9w字。零零散散大概寫了兩個星期左右。初衷是想要鍛煉一下c++的編程能力以及數據結構和算法。但寫著寫著就想盡可能地將內容完善,簡潔,并且簡單易懂地描述各種插入和刪除的過程。

    ??我相信,只要你從頭看下來,你對樹的理解必然會上升一個檔次。如果你對某些地方的算法有所困惑,那不妨將其手敲一遍,對照著文章再看一遍,或者看下鄧老師的書和講解,你一定能理解這里為什么要用這種算法。

    ??c++就我個人理解而言,是一門非常嚴謹的語言。寫c++代碼的時候,要考慮的因素很多,因此可能初學起來相對java,c#等語言而言,會感到進度緩慢,但只要入門了之后,特別是了解了c++11常用特性,以及c++的常用語法之后,你會對c++越來越喜愛,也會明白為什么c++是世界上效率最高的語言。

    ??廢話不多說,感謝你能耐心看完我精心準備的此系列文章,雖然我已經和鄧老師的代碼的各個實現進行了比對,但難免會有所遺漏之處,希望廣大讀者能夠即時進行指正。

    ??如果你覺得對你有用,請不要光收藏,你的贊是我繼續分享好東西的動力。

    另外,借用侯捷大師的話:

    學一個東西,不知道其道理,不高明!

    總結

    以上是生活随笔為你收集整理的真c++ 从二叉树到红黑树(6)之红黑树RedBlack的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    97精品人妻一区二区三区香蕉 | 亚洲成色www久久网站 | 色欲人妻aaaaaaa无码 | 亚洲日本va午夜在线电影 | 无码成人精品区在线观看 | 亚洲国产精品成人久久蜜臀 | 国产精品va在线观看无码 | 国产两女互慰高潮视频在线观看 | 少妇一晚三次一区二区三区 | 色欲综合久久中文字幕网 | 亚洲欧洲中文日韩av乱码 | 亚洲午夜福利在线观看 | 亚洲国产高清在线观看视频 | 免费人成在线视频无码 | 国产深夜福利视频在线 | 久久久久se色偷偷亚洲精品av | 水蜜桃av无码 | 日本一卡2卡3卡四卡精品网站 | 国产成人综合美国十次 | 又色又爽又黄的美女裸体网站 | 少妇无码一区二区二三区 | 性欧美videos高清精品 | 国产偷国产偷精品高清尤物 | 国产亚洲精品久久久久久大师 | 国产成人精品视频ⅴa片软件竹菊 | 国产成人久久精品流白浆 | 国产性生大片免费观看性 | 久久人人爽人人人人片 | 秋霞成人午夜鲁丝一区二区三区 | 亚洲成a人片在线观看日本 | 夜夜夜高潮夜夜爽夜夜爰爰 | 疯狂三人交性欧美 | 日日摸日日碰夜夜爽av | 国产欧美熟妇另类久久久 | 九九在线中文字幕无码 | 亚洲综合色区中文字幕 | 亚洲国产精品无码久久久久高潮 | 国产电影无码午夜在线播放 | 国产片av国语在线观看 | 少妇的肉体aa片免费 | 色五月丁香五月综合五月 | 欧美 亚洲 国产 另类 | 国产av剧情md精品麻豆 | √天堂资源地址中文在线 | 男女猛烈xx00免费视频试看 | 男女猛烈xx00免费视频试看 | 中文字幕色婷婷在线视频 | 日韩少妇白浆无码系列 | 亚洲综合无码久久精品综合 | 妺妺窝人体色www在线小说 | 婷婷丁香五月天综合东京热 | 国产真实乱对白精彩久久 | 成人欧美一区二区三区黑人 | 午夜无码区在线观看 | 欧美午夜特黄aaaaaa片 | 又色又爽又黄的美女裸体网站 | 国产乱人偷精品人妻a片 | 亚洲日本在线电影 | 婷婷六月久久综合丁香 | 麻豆av传媒蜜桃天美传媒 | 日本大乳高潮视频在线观看 | 人人爽人人爽人人片av亚洲 | 久久久精品欧美一区二区免费 | 日韩人妻系列无码专区 | 亚洲精品国产精品乱码视色 | 日本一区二区三区免费播放 | 大地资源网第二页免费观看 | 一本久道高清无码视频 | 国产成人精品一区二区在线小狼 | 精品久久8x国产免费观看 | 日韩av无码一区二区三区不卡 | 亚洲中文字幕无码中文字在线 | 久久精品视频在线看15 | 免费网站看v片在线18禁无码 | 扒开双腿疯狂进出爽爽爽视频 | 午夜肉伦伦影院 | 岛国片人妻三上悠亚 | √8天堂资源地址中文在线 | 日韩欧美群交p片內射中文 | 精品成人av一区二区三区 | 99精品国产综合久久久久五月天 | 中文字幕无线码免费人妻 | 国产性生交xxxxx无码 | 欧美熟妇另类久久久久久不卡 | 久久伊人色av天堂九九小黄鸭 | 在线天堂新版最新版在线8 | 国产色视频一区二区三区 | 2020久久超碰国产精品最新 | 精品国偷自产在线 | 国产免费久久久久久无码 | 成年美女黄网站色大免费视频 | 麻豆果冻传媒2021精品传媒一区下载 | 美女扒开屁股让男人桶 | 久久久精品456亚洲影院 | 久久久久久久久蜜桃 | 欧美性猛交xxxx富婆 | 99久久99久久免费精品蜜桃 | 无码吃奶揉捏奶头高潮视频 | 任你躁在线精品免费 | 午夜精品久久久久久久 | 欧美真人作爱免费视频 | 国产激情艳情在线看视频 | 日日鲁鲁鲁夜夜爽爽狠狠 | 亚洲色欲色欲天天天www | 亚洲乱码中文字幕在线 | 少妇太爽了在线观看 | 亚洲欧美精品aaaaaa片 | 国产猛烈高潮尖叫视频免费 | 伊人久久大香线蕉亚洲 | 欧美zoozzooz性欧美 | 欧洲精品码一区二区三区免费看 | 国产成人综合在线女婷五月99播放 | 大肉大捧一进一出视频出来呀 | 无码一区二区三区在线观看 | 欧美亚洲国产一区二区三区 | 精品欧洲av无码一区二区三区 | 亚洲国产欧美国产综合一区 | а√天堂www在线天堂小说 | av无码不卡在线观看免费 | 国产乱子伦视频在线播放 | 国产精品99久久精品爆乳 | 99久久精品午夜一区二区 | 精品欧美一区二区三区久久久 | 成人性做爰aaa片免费看不忠 | 亚洲一区二区三区偷拍女厕 | 综合激情五月综合激情五月激情1 | 国产成人无码a区在线观看视频app | 国产无套内射久久久国产 | 亚洲大尺度无码无码专区 | 领导边摸边吃奶边做爽在线观看 | 人妻少妇精品视频专区 | 麻豆国产人妻欲求不满 | 精品久久久中文字幕人妻 | 性欧美疯狂xxxxbbbb | 波多野42部无码喷潮在线 | 国产在线精品一区二区高清不卡 | 精品无码国产自产拍在线观看蜜 | 天堂在线观看www | 亚洲综合精品香蕉久久网 | 亚洲春色在线视频 | 亚洲狠狠婷婷综合久久 | 久久亚洲精品成人无码 | 无码帝国www无码专区色综合 | 亚洲一区二区三区偷拍女厕 | 亚洲自偷自偷在线制服 | 丁香啪啪综合成人亚洲 | 成人免费视频视频在线观看 免费 | 成年美女黄网站色大免费全看 | 亚洲无人区一区二区三区 | 国产激情艳情在线看视频 | 免费无码的av片在线观看 | √天堂中文官网8在线 | 欧美性生交xxxxx久久久 | 精品无人区无码乱码毛片国产 | 综合激情五月综合激情五月激情1 | 麻豆果冻传媒2021精品传媒一区下载 | 久久久中文字幕日本无吗 | 国产一区二区三区日韩精品 | 国产99久久精品一区二区 | 性色av无码免费一区二区三区 | 国产在线无码精品电影网 | √8天堂资源地址中文在线 | 狠狠综合久久久久综合网 | 国产精品久久国产精品99 | 99精品久久毛片a片 | 欧美丰满熟妇xxxx | 久久国语露脸国产精品电影 | 精品亚洲成av人在线观看 | av无码不卡在线观看免费 | 日韩人妻系列无码专区 | 波多野结衣乳巨码无在线观看 | 永久黄网站色视频免费直播 | 国产精品无码一区二区三区不卡 | 久久精品国产99精品亚洲 | 日韩精品一区二区av在线 | 亚洲中文字幕无码中字 | 国内精品人妻无码久久久影院蜜桃 | 国产亚洲精品久久久久久国模美 | 黑人粗大猛烈进出高潮视频 | 动漫av一区二区在线观看 | 午夜精品一区二区三区的区别 | 图片小说视频一区二区 | 少妇人妻av毛片在线看 | 色综合久久久久综合一本到桃花网 | 精品人妻人人做人人爽夜夜爽 | 日韩精品乱码av一区二区 | 黑人巨大精品欧美一区二区 | 亚洲精品www久久久 | 国产精品无码永久免费888 | 人人妻人人澡人人爽欧美一区九九 | 亚洲一区二区三区香蕉 | 国产人妻久久精品二区三区老狼 | 亚洲精品久久久久久一区二区 | 狠狠色噜噜狠狠狠7777奇米 | 国产区女主播在线观看 | 精品 日韩 国产 欧美 视频 | 久久久国产精品无码免费专区 | 我要看www免费看插插视频 | 亚洲精品国产品国语在线观看 | 成年美女黄网站色大免费全看 | 一本久道久久综合婷婷五月 | 少妇性l交大片欧洲热妇乱xxx | 亚洲一区av无码专区在线观看 | 免费观看又污又黄的网站 | 2020久久香蕉国产线看观看 | 亚洲aⅴ无码成人网站国产app | 亚洲成av人片天堂网无码】 | 天堂一区人妻无码 | 国产亚洲日韩欧美另类第八页 | 青青草原综合久久大伊人精品 | 午夜免费福利小电影 | 亚欧洲精品在线视频免费观看 | 欧美激情内射喷水高潮 | 国产无遮挡又黄又爽又色 | 欧美 亚洲 国产 另类 | 精品国产一区二区三区av 性色 | 亚洲中文字幕成人无码 | 中文字幕人妻丝袜二区 | 成人无码视频免费播放 | 亚洲国产欧美在线成人 | 国产亚洲精品久久久闺蜜 | 日本大乳高潮视频在线观看 | 四虎4hu永久免费 | 亚洲啪av永久无码精品放毛片 | 人妻体内射精一区二区三四 | 台湾无码一区二区 | 国产成人精品三级麻豆 | 精品国产国产综合精品 | 日韩人妻少妇一区二区三区 | 图片区 小说区 区 亚洲五月 | 一本久久a久久精品亚洲 | 无码av中文字幕免费放 | 亚拍精品一区二区三区探花 | 亚洲色www成人永久网址 | 鲁鲁鲁爽爽爽在线视频观看 | 国产成人精品三级麻豆 | 中国女人内谢69xxxx | 熟女少妇人妻中文字幕 | 麻豆人妻少妇精品无码专区 | 东京热无码av男人的天堂 | 欧美性生交活xxxxxdddd | 亚洲国产欧美国产综合一区 | 欧美国产日韩亚洲中文 | 色综合久久中文娱乐网 | 亚洲精品中文字幕久久久久 | 亚洲一区二区三区四区 | 免费播放一区二区三区 | 少妇激情av一区二区 | 欧美亚洲日韩国产人成在线播放 | 亚洲综合精品香蕉久久网 | 久久亚洲a片com人成 | 国产美女极度色诱视频www | 香蕉久久久久久av成人 | 久久久精品欧美一区二区免费 | 欧美老人巨大xxxx做受 | 欧美老熟妇乱xxxxx | 国产成人综合美国十次 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 无码精品国产va在线观看dvd | 丰满少妇弄高潮了www | 日韩精品无码免费一区二区三区 | 久久久成人毛片无码 | 日韩精品无码一本二本三本色 | 俺去俺来也在线www色官网 | 亚洲熟妇色xxxxx欧美老妇y | 疯狂三人交性欧美 | 国产精品无套呻吟在线 | 免费人成网站视频在线观看 | 成人精品视频一区二区三区尤物 | 国产av无码专区亚洲a∨毛片 | 激情亚洲一区国产精品 | 亚洲国产av美女网站 | 国产情侣作爱视频免费观看 | 久久综合给久久狠狠97色 | 又湿又紧又大又爽a视频国产 | 国产香蕉尹人视频在线 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 日韩精品无码一本二本三本色 | 中文字幕乱码人妻二区三区 | 欧美精品在线观看 | 欧美国产日韩久久mv | 亚洲欧美综合区丁香五月小说 | 曰本女人与公拘交酡免费视频 | 色妞www精品免费视频 | 亚洲成av人片天堂网无码】 | 日日噜噜噜噜夜夜爽亚洲精品 | 又大又硬又黄的免费视频 | 精品欧美一区二区三区久久久 | 国产无av码在线观看 | 国产综合色产在线精品 | 免费观看激色视频网站 | 国产精品久久精品三级 | 国产人妻人伦精品1国产丝袜 | 久久综合九色综合欧美狠狠 | 亚洲综合伊人久久大杳蕉 | 久久www免费人成人片 | 无码一区二区三区在线观看 | 大胆欧美熟妇xx | 激情爆乳一区二区三区 | 国产午夜无码视频在线观看 | a在线观看免费网站大全 | 2020最新国产自产精品 | 亚洲色大成网站www | 无码人妻丰满熟妇区五十路百度 | 国产性生大片免费观看性 | 精品人人妻人人澡人人爽人人 | 久久国产36精品色熟妇 | 野狼第一精品社区 | 99久久久无码国产精品免费 | 日日摸天天摸爽爽狠狠97 | 欧美日韩亚洲国产精品 | 亚洲精品午夜国产va久久成人 | 成人亚洲精品久久久久 | 亚洲色无码一区二区三区 | 久久精品国产日本波多野结衣 | 色诱久久久久综合网ywww | 美女极度色诱视频国产 | 一区二区三区高清视频一 | 亚洲成av人片在线观看无码不卡 | 久久久成人毛片无码 | 97久久国产亚洲精品超碰热 | 成人无码视频免费播放 | 国产成人无码av一区二区 | 成人一区二区免费视频 | 少妇太爽了在线观看 | 麻豆av传媒蜜桃天美传媒 | 18精品久久久无码午夜福利 | 国产亚洲精品久久久久久国模美 | 成人性做爰aaa片免费看不忠 | 久久精品中文闷骚内射 | 亚洲区小说区激情区图片区 | 少妇被粗大的猛进出69影院 | 国产乱人伦av在线无码 | 久久亚洲国产成人精品性色 | a在线观看免费网站大全 | 久久综合色之久久综合 | 亚洲熟妇色xxxxx欧美老妇y | 丰满少妇人妻久久久久久 | 国产高清av在线播放 | 人人妻人人藻人人爽欧美一区 | 国产又爽又黄又刺激的视频 | 搡女人真爽免费视频大全 | 水蜜桃亚洲一二三四在线 | 亚洲欧美中文字幕5发布 | 无码乱肉视频免费大全合集 | 亚洲另类伦春色综合小说 | 大胆欧美熟妇xx | 欧美国产日产一区二区 | 红桃av一区二区三区在线无码av | 嫩b人妻精品一区二区三区 | 免费国产成人高清在线观看网站 | 麻豆果冻传媒2021精品传媒一区下载 | 午夜熟女插插xx免费视频 | 国产综合色产在线精品 | 亚洲欧美日韩国产精品一区二区 | 真人与拘做受免费视频一 | 色综合久久久无码中文字幕 | 久久国语露脸国产精品电影 | 欧美亚洲国产一区二区三区 | 久激情内射婷内射蜜桃人妖 | 中文字幕无码av激情不卡 | 夜精品a片一区二区三区无码白浆 | 天堂久久天堂av色综合 | 国精产品一区二区三区 | 国产熟妇另类久久久久 | 久久久久久a亚洲欧洲av冫 | 久久国语露脸国产精品电影 | 中文字幕精品av一区二区五区 | 少妇性荡欲午夜性开放视频剧场 | 国产成人精品必看 | 中文久久乱码一区二区 | 亚洲精品成人福利网站 | 久久综合激激的五月天 | 欧美精品免费观看二区 | 蜜臀av在线播放 久久综合激激的五月天 | 日韩精品成人一区二区三区 | 精品无码国产自产拍在线观看蜜 | 国产精品高潮呻吟av久久 | 亚洲 另类 在线 欧美 制服 | 国产精品国产三级国产专播 | 无码国产乱人伦偷精品视频 | 小泽玛莉亚一区二区视频在线 | 97夜夜澡人人双人人人喊 | 久久亚洲国产成人精品性色 | 特黄特色大片免费播放器图片 | 欧美丰满少妇xxxx性 | 国产精品丝袜黑色高跟鞋 | 免费看男女做好爽好硬视频 | 丝袜人妻一区二区三区 | 亚洲熟妇自偷自拍另类 | 正在播放老肥熟妇露脸 | 又湿又紧又大又爽a视频国产 | 亚洲精品一区二区三区婷婷月 | 精品一区二区三区波多野结衣 | 色婷婷久久一区二区三区麻豆 | 秋霞成人午夜鲁丝一区二区三区 | 国产莉萝无码av在线播放 | 在线观看免费人成视频 | 好屌草这里只有精品 | 亚洲国产精品久久久久久 | 久久综合九色综合97网 | 国产色在线 | 国产 | 久久亚洲中文字幕无码 | 亚洲国产精品一区二区美利坚 | 亚洲欧洲中文日韩av乱码 | 国产色视频一区二区三区 | 麻豆国产丝袜白领秘书在线观看 | 秋霞特色aa大片 | 一个人免费观看的www视频 | 在线播放亚洲第一字幕 | 高清国产亚洲精品自在久久 | 亚洲国产欧美日韩精品一区二区三区 | 成年美女黄网站色大免费视频 | 亚洲日本va午夜在线电影 | 双乳奶水饱满少妇呻吟 | 日本又色又爽又黄的a片18禁 | 国产在线精品一区二区高清不卡 | 久久久久久久久蜜桃 | 欧美第一黄网免费网站 | 精品久久久久久人妻无码中文字幕 | 亚洲 a v无 码免 费 成 人 a v | 国产一区二区三区影院 | 国产又爽又黄又刺激的视频 | 亚洲精品无码人妻无码 | 四虎影视成人永久免费观看视频 | 午夜福利不卡在线视频 | 大肉大捧一进一出视频出来呀 | 色综合久久久久综合一本到桃花网 | 色妞www精品免费视频 | 狠狠色欧美亚洲狠狠色www | 最近的中文字幕在线看视频 | 国产成人亚洲综合无码 | 久久久久99精品国产片 | 捆绑白丝粉色jk震动捧喷白浆 | 国产色视频一区二区三区 | 熟妇人妻无乱码中文字幕 | 欧美xxxx黑人又粗又长 | 国产精品鲁鲁鲁 | 午夜福利不卡在线视频 | 欧美喷潮久久久xxxxx | 性做久久久久久久免费看 | 免费看少妇作爱视频 | 97无码免费人妻超级碰碰夜夜 | 久久久久久久久蜜桃 | 强开小婷嫩苞又嫩又紧视频 | 精品偷拍一区二区三区在线看 | 免费男性肉肉影院 | 精品久久久无码中文字幕 | 少妇无码吹潮 | 久久国内精品自在自线 | 国产人妻人伦精品1国产丝袜 | 十八禁视频网站在线观看 | 亚洲s码欧洲m码国产av | 成年美女黄网站色大免费视频 | 曰本女人与公拘交酡免费视频 | 国产精品嫩草久久久久 | 成熟妇人a片免费看网站 | 无码任你躁久久久久久久 | 国产女主播喷水视频在线观看 | 无码帝国www无码专区色综合 | 亚洲综合色区中文字幕 | 一本久久伊人热热精品中文字幕 | 亚洲中文字幕无码一久久区 | 亚洲一区二区三区无码久久 | 精品 日韩 国产 欧美 视频 | 小sao货水好多真紧h无码视频 | 精品国产一区二区三区四区在线看 | 精品无码国产一区二区三区av | 无码国产色欲xxxxx视频 | 日本大乳高潮视频在线观看 | 精品久久久久久人妻无码中文字幕 | 国产精品久久国产三级国 | 亚洲熟女一区二区三区 | 久久精品视频在线看15 | 一本精品99久久精品77 | 精品欧美一区二区三区久久久 | 一本久久a久久精品亚洲 | 成人性做爰aaa片免费看不忠 | 亚洲精品国产精品乱码不卡 | 97夜夜澡人人爽人人喊中国片 | 亚洲精品无码国产 | 2019nv天堂香蕉在线观看 | 国产乱码精品一品二品 | a在线亚洲男人的天堂 | 亚洲国产精品美女久久久久 | 人人爽人人澡人人高潮 | 老熟女重囗味hdxx69 | 欧美日韩在线亚洲综合国产人 | 亚洲中文字幕无码中文字在线 | 日本在线高清不卡免费播放 | 性做久久久久久久免费看 | 亚洲日本va午夜在线电影 | 亚洲成av人影院在线观看 | 成人免费无码大片a毛片 | 亚洲一区二区三区偷拍女厕 | 99久久精品午夜一区二区 | 97无码免费人妻超级碰碰夜夜 | 国产精品无套呻吟在线 | 亚洲一区二区三区香蕉 | 玩弄少妇高潮ⅹxxxyw | 久久天天躁夜夜躁狠狠 | 成人欧美一区二区三区黑人免费 | 亚洲理论电影在线观看 | 色综合久久久久综合一本到桃花网 | 精品 日韩 国产 欧美 视频 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 精品国产成人一区二区三区 | 欧美自拍另类欧美综合图片区 | 天天躁夜夜躁狠狠是什么心态 | 亚洲日韩精品欧美一区二区 | 亚洲成在人网站无码天堂 | 欧美日韩色另类综合 | 欧美激情内射喷水高潮 | 日产精品高潮呻吟av久久 | 99久久99久久免费精品蜜桃 | 亚洲天堂2017无码中文 | 荡女精品导航 | 色婷婷久久一区二区三区麻豆 | 亚洲综合在线一区二区三区 | 国产69精品久久久久app下载 | 精品无码一区二区三区爱欲 | 成人无码影片精品久久久 | 久久久久人妻一区精品色欧美 | 免费人成网站视频在线观看 | 精品一区二区三区波多野结衣 | 宝宝好涨水快流出来免费视频 | 一本一道久久综合久久 | 国产精品亚洲а∨无码播放麻豆 | 国产av一区二区精品久久凹凸 | 人妻有码中文字幕在线 | 国产高清不卡无码视频 | 国产在线精品一区二区三区直播 | 国产三级精品三级男人的天堂 | 国产精品美女久久久网av | 国产成人无码区免费内射一片色欲 | 全黄性性激高免费视频 | www国产精品内射老师 | 欧美人妻一区二区三区 | 国产一区二区三区影院 | 亚洲综合在线一区二区三区 | 天堂在线观看www | 无码播放一区二区三区 | 亚洲精品久久久久avwww潮水 | 大肉大捧一进一出好爽视频 | 午夜福利一区二区三区在线观看 | 性开放的女人aaa片 | 俄罗斯老熟妇色xxxx | 四虎4hu永久免费 | 午夜精品久久久久久久久 | 任你躁在线精品免费 | 国产xxx69麻豆国语对白 | 性生交大片免费看女人按摩摩 | 国产精品99爱免费视频 | 精品亚洲韩国一区二区三区 | 成人综合网亚洲伊人 | 精品久久久久久人妻无码中文字幕 | 久久精品女人的天堂av | 77777熟女视频在线观看 а天堂中文在线官网 | 国产亚洲精品久久久久久久 | 色综合久久久无码网中文 | 99久久久无码国产aaa精品 | 精品无人国产偷自产在线 | 正在播放东北夫妻内射 | 国产精品久久久久久无码 | 国产午夜亚洲精品不卡下载 | 久久久亚洲欧洲日产国码αv | 欧美阿v高清资源不卡在线播放 | 国产乱人偷精品人妻a片 | 久热国产vs视频在线观看 | 亚洲精品www久久久 | 波多野结衣av在线观看 | 中文精品无码中文字幕无码专区 | 岛国片人妻三上悠亚 | 亚洲精品鲁一鲁一区二区三区 | 领导边摸边吃奶边做爽在线观看 | 伊在人天堂亚洲香蕉精品区 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产av一区二区精品久久凹凸 | 亚洲国产精品一区二区第一页 | 搡女人真爽免费视频大全 | 精品久久久中文字幕人妻 | 女人被爽到呻吟gif动态图视看 | 国产午夜精品一区二区三区嫩草 | 久久天天躁夜夜躁狠狠 | 欧美35页视频在线观看 | 久久久久久久女国产乱让韩 | 色婷婷综合激情综在线播放 | 又大又硬又黄的免费视频 | 日本肉体xxxx裸交 | 夜先锋av资源网站 | 色窝窝无码一区二区三区色欲 | 性欧美疯狂xxxxbbbb | 中文字幕无码免费久久9一区9 | 樱花草在线社区www | 亚洲成a人片在线观看无码3d | 男女爱爱好爽视频免费看 | 激情内射亚州一区二区三区爱妻 | 国产性生交xxxxx无码 | 无码人中文字幕 | 国内丰满熟女出轨videos | 自拍偷自拍亚洲精品被多人伦好爽 | 大肉大捧一进一出视频出来呀 | www国产亚洲精品久久网站 | 性色av无码免费一区二区三区 | 在线 国产 欧美 亚洲 天堂 | 狂野欧美激情性xxxx | 久久精品视频在线看15 | 男人的天堂av网站 | 日韩精品无码一区二区中文字幕 | 午夜精品久久久内射近拍高清 | 亚洲成av人片天堂网无码】 | 99久久婷婷国产综合精品青草免费 | 奇米影视7777久久精品 | 男女作爱免费网站 | 亚洲国产精华液网站w | 色婷婷久久一区二区三区麻豆 | 无套内谢的新婚少妇国语播放 | 亚洲成av人片天堂网无码】 | 妺妺窝人体色www婷婷 | 国产精品视频免费播放 | 亚洲国产精品成人久久蜜臀 | 又湿又紧又大又爽a视频国产 | 亚洲成色www久久网站 | 一本久道久久综合狠狠爱 | 国产色视频一区二区三区 | 中文字幕无码热在线视频 | 亚洲の无码国产の无码步美 | 亚洲经典千人经典日产 | 成人精品视频一区二区三区尤物 | 精品国产成人一区二区三区 | 国产亚洲欧美在线专区 | 日产国产精品亚洲系列 | 在线播放无码字幕亚洲 | 亚洲一区av无码专区在线观看 | 亚洲欧美中文字幕5发布 | 国产在热线精品视频 | 亚洲va中文字幕无码久久不卡 | 精品久久久无码人妻字幂 | 亚洲爆乳精品无码一区二区三区 | 国产精品va在线播放 | 精品国产一区二区三区四区在线看 | 久久精品中文字幕一区 | 精品偷自拍另类在线观看 | 一本久久伊人热热精品中文字幕 | 久久久精品人妻久久影视 | 国产人成高清在线视频99最全资源 | 久久久久免费看成人影片 | 高清不卡一区二区三区 | 久久久婷婷五月亚洲97号色 | 激情内射亚州一区二区三区爱妻 | 大肉大捧一进一出好爽视频 | 国产精品亚洲一区二区三区喷水 | 人人妻人人澡人人爽精品欧美 | 欧美性黑人极品hd | 婷婷综合久久中文字幕蜜桃三电影 | 欧美自拍另类欧美综合图片区 | 国内综合精品午夜久久资源 | 欧美人妻一区二区三区 | 乌克兰少妇性做爰 | 国产精品理论片在线观看 | 鲁鲁鲁爽爽爽在线视频观看 | 牲欲强的熟妇农村老妇女 | 日韩成人一区二区三区在线观看 | 中文字幕乱码人妻二区三区 | 中文字幕乱码人妻二区三区 | 中文字幕乱码中文乱码51精品 | 成人欧美一区二区三区黑人免费 | 亚洲一区av无码专区在线观看 | 最新版天堂资源中文官网 | 中文字幕人妻丝袜二区 | 午夜成人1000部免费视频 | 中文无码成人免费视频在线观看 | 日韩精品无码免费一区二区三区 | 女人被男人爽到呻吟的视频 | aⅴ亚洲 日韩 色 图网站 播放 | 大肉大捧一进一出好爽视频 | 乱人伦中文视频在线观看 | 亚洲国产成人a精品不卡在线 | 丰满少妇弄高潮了www | 成人无码影片精品久久久 | 丰满岳乱妇在线观看中字无码 | 亚洲自偷自拍另类第1页 | 老司机亚洲精品影院 | 国语精品一区二区三区 | 久久精品国产精品国产精品污 | 性欧美牲交xxxxx视频 | 97夜夜澡人人爽人人喊中国片 | 免费观看激色视频网站 | 51国偷自产一区二区三区 | 国精产品一品二品国精品69xx | 国产精品无码成人午夜电影 | 麻豆果冻传媒2021精品传媒一区下载 | 宝宝好涨水快流出来免费视频 | 人人妻人人澡人人爽欧美一区 | 亚洲乱码中文字幕在线 | 久久99精品久久久久久动态图 | 成人精品视频一区二区三区尤物 | 偷窥日本少妇撒尿chinese | 又粗又大又硬毛片免费看 | 欧美性生交xxxxx久久久 | 天天爽夜夜爽夜夜爽 | 性欧美牲交在线视频 | 亚洲综合久久一区二区 | 国产一区二区三区影院 | 日日碰狠狠躁久久躁蜜桃 | 欧美国产亚洲日韩在线二区 | 无码av免费一区二区三区试看 | 亚洲精品午夜无码电影网 | 精品人妻人人做人人爽 | 又大又黄又粗又爽的免费视频 | 老司机亚洲精品影院 | 国产精品无码成人午夜电影 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 国产午夜无码视频在线观看 | а√天堂www在线天堂小说 | 狂野欧美性猛xxxx乱大交 | 久久久婷婷五月亚洲97号色 | 国产成人综合美国十次 | 18禁止看的免费污网站 | 日本va欧美va欧美va精品 | 水蜜桃av无码 | 国产成人无码av在线影院 | 一本久道久久综合狠狠爱 | 天堂а√在线地址中文在线 | 性生交大片免费看l | 色综合久久久久综合一本到桃花网 | 亚洲成a人片在线观看无码 | 欧美喷潮久久久xxxxx | 在线播放免费人成毛片乱码 | 欧美zoozzooz性欧美 | 对白脏话肉麻粗话av | 狠狠色噜噜狠狠狠狠7777米奇 | 乱码av麻豆丝袜熟女系列 | 黑人巨大精品欧美一区二区 | 中文字幕色婷婷在线视频 | 全黄性性激高免费视频 | 国产精品美女久久久久av爽李琼 | 国产亚洲人成a在线v网站 | 国产成人精品视频ⅴa片软件竹菊 | 久久人人爽人人人人片 | 欧美国产日韩亚洲中文 | 久久久亚洲欧洲日产国码αv | 日日躁夜夜躁狠狠躁 | 男人扒开女人内裤强吻桶进去 | 人人妻人人澡人人爽人人精品 | 久久久精品人妻久久影视 | 自拍偷自拍亚洲精品10p | 欧美激情一区二区三区成人 | 亚洲小说图区综合在线 | 女人被男人躁得好爽免费视频 | 国产做国产爱免费视频 | 亚洲成熟女人毛毛耸耸多 | 国产成人无码av片在线观看不卡 | 中文字幕+乱码+中文字幕一区 | 亚洲熟妇自偷自拍另类 | 欧洲精品码一区二区三区免费看 | 美女扒开屁股让男人桶 | 色老头在线一区二区三区 | 18黄暴禁片在线观看 | 国产真人无遮挡作爱免费视频 | 99riav国产精品视频 | 国产内射老熟女aaaa | 国产精品人人妻人人爽 | 中文字幕乱妇无码av在线 | 色 综合 欧美 亚洲 国产 | 人人爽人人澡人人高潮 | 蜜桃臀无码内射一区二区三区 | 久久aⅴ免费观看 | 成人免费无码大片a毛片 | 亚洲一区二区三区播放 | 永久免费观看国产裸体美女 | 97精品国产97久久久久久免费 | 在线观看国产午夜福利片 | 亚洲娇小与黑人巨大交 | 天堂亚洲免费视频 | 久久国产36精品色熟妇 | 一本色道久久综合亚洲精品不卡 | 欧美xxxxx精品 | 欧美精品免费观看二区 | 久久国产精品精品国产色婷婷 | 高清无码午夜福利视频 | 妺妺窝人体色www婷婷 | 午夜精品久久久内射近拍高清 | 国产午夜亚洲精品不卡 | 成人免费无码大片a毛片 | 成在人线av无码免观看麻豆 | 一本精品99久久精品77 | 5858s亚洲色大成网站www | 亚洲a无码综合a国产av中文 | 国产亚洲精品久久久久久久久动漫 | 欧美日韩一区二区免费视频 | 四虎国产精品一区二区 | 捆绑白丝粉色jk震动捧喷白浆 | 国产精品久久久久7777 | 2019nv天堂香蕉在线观看 | 国产三级精品三级男人的天堂 | 国产午夜福利100集发布 | 欧美日韩视频无码一区二区三 | 精品人人妻人人澡人人爽人人 | 乱码av麻豆丝袜熟女系列 | 人妻中文无码久热丝袜 | 久久久久久久久888 | 国内精品久久毛片一区二区 | 国产精品久久久av久久久 | 久久亚洲精品成人无码 | 清纯唯美经典一区二区 | 2020久久香蕉国产线看观看 | 日本www一道久久久免费榴莲 | 大胆欧美熟妇xx | 男人扒开女人内裤强吻桶进去 | 伊人久久婷婷五月综合97色 | 色婷婷欧美在线播放内射 | 久久久国产一区二区三区 | 国产成人综合在线女婷五月99播放 | 亚洲一区av无码专区在线观看 | 久久99精品久久久久久动态图 | 国产av一区二区三区最新精品 | 久久久久久久久888 | 久久午夜无码鲁丝片 | 帮老师解开蕾丝奶罩吸乳网站 | 大乳丰满人妻中文字幕日本 | 少妇性俱乐部纵欲狂欢电影 | 无码国内精品人妻少妇 | 国产无套粉嫩白浆在线 | 日日干夜夜干 | 亚洲 高清 成人 动漫 | 精品国产一区二区三区四区在线看 | 少妇无码吹潮 | 久久精品国产亚洲精品 | 欧美老熟妇乱xxxxx | 扒开双腿疯狂进出爽爽爽视频 | 亚洲精品久久久久中文第一幕 | 国产口爆吞精在线视频 | 人人妻人人澡人人爽欧美精品 | 亚洲成av人片天堂网无码】 | 久久天天躁夜夜躁狠狠 | 亚洲国产精品久久久天堂 | 中文字幕 人妻熟女 | 国产亚洲精品久久久久久大师 | 小泽玛莉亚一区二区视频在线 | 免费网站看v片在线18禁无码 | 亚洲人成网站免费播放 | 最近中文2019字幕第二页 | 国内少妇偷人精品视频免费 | 国产无遮挡吃胸膜奶免费看 | 国产av久久久久精东av | 久久久亚洲欧洲日产国码αv | 2020久久超碰国产精品最新 | 亚洲熟妇色xxxxx亚洲 | 熟妇人妻激情偷爽文 | 2020久久超碰国产精品最新 | 亚洲国产精品美女久久久久 | 7777奇米四色成人眼影 | 午夜熟女插插xx免费视频 | 欧美性生交活xxxxxdddd | 综合人妻久久一区二区精品 | 国产人妻人伦精品 | 亚洲区欧美区综合区自拍区 | 国产又粗又硬又大爽黄老大爷视 | 欧美黑人乱大交 | 麻豆国产人妻欲求不满谁演的 | 国产农村妇女高潮大叫 | 爽爽影院免费观看 | 欧美性猛交内射兽交老熟妇 | 精品无人区无码乱码毛片国产 | 国产一区二区不卡老阿姨 | 撕开奶罩揉吮奶头视频 | 欧美性猛交xxxx富婆 | 亚洲人成人无码网www国产 | 狠狠cao日日穞夜夜穞av | 巨爆乳无码视频在线观看 | 老熟妇仑乱视频一区二区 | 中文字幕+乱码+中文字幕一区 | 思思久久99热只有频精品66 | 国产成人精品久久亚洲高清不卡 | 日韩精品无码一区二区中文字幕 | 人妻熟女一区 | 九九热爱视频精品 | 亚洲色欲色欲天天天www | 玩弄中年熟妇正在播放 | 2020久久超碰国产精品最新 | 人妻互换免费中文字幕 | 无码毛片视频一区二区本码 | 亚洲日韩乱码中文无码蜜桃臀网站 | 强辱丰满人妻hd中文字幕 | 性欧美大战久久久久久久 | 丝袜足控一区二区三区 | 国产免费观看黄av片 | 亚洲男人av香蕉爽爽爽爽 | 夜先锋av资源网站 | 成熟妇人a片免费看网站 | 亚洲精品一区二区三区大桥未久 | 亚洲精品一区二区三区四区五区 | 亚洲色大成网站www国产 | 久久天天躁狠狠躁夜夜免费观看 | 成人一区二区免费视频 | 无码精品人妻一区二区三区av | 亚洲综合伊人久久大杳蕉 | 欧美午夜特黄aaaaaa片 | 人妻无码αv中文字幕久久琪琪布 | 亚洲一区二区三区 | 久久亚洲a片com人成 | 熟妇人妻激情偷爽文 | 中文字幕无码热在线视频 | 久久久久久国产精品无码下载 | 麻豆国产丝袜白领秘书在线观看 | 人妻少妇精品无码专区二区 | 国产乱人无码伦av在线a | 久久久久久久人妻无码中文字幕爆 | 国产成人一区二区三区在线观看 | 亚洲精品一区二区三区在线观看 | 日本爽爽爽爽爽爽在线观看免 | 亚洲s色大片在线观看 | 亚洲国产欧美国产综合一区 | 中文字幕无码免费久久9一区9 | 男女性色大片免费网站 | 国产精品美女久久久网av | 又紧又大又爽精品一区二区 | 国产真人无遮挡作爱免费视频 | 特黄特色大片免费播放器图片 | 极品尤物被啪到呻吟喷水 | 中文字幕乱码中文乱码51精品 | 国产真实乱对白精彩久久 | 97资源共享在线视频 | 国产成人精品一区二区在线小狼 | 精品一区二区三区波多野结衣 | 色欲人妻aaaaaaa无码 | 亚洲国产欧美国产综合一区 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 国产精品香蕉在线观看 | 妺妺窝人体色www在线小说 | 色欲人妻aaaaaaa无码 | 97精品人妻一区二区三区香蕉 | 黑人粗大猛烈进出高潮视频 | 无码人妻丰满熟妇区毛片18 | 欧美国产日韩久久mv | av无码久久久久不卡免费网站 | 5858s亚洲色大成网站www | 成人精品一区二区三区中文字幕 | 欧洲美熟女乱又伦 | 亚洲色www成人永久网址 | 亚洲另类伦春色综合小说 | 扒开双腿疯狂进出爽爽爽视频 | 国产又爽又黄又刺激的视频 | 成年美女黄网站色大免费视频 | 欧美日本日韩 | 国产精品99久久精品爆乳 | 亚欧洲精品在线视频免费观看 | √8天堂资源地址中文在线 | 欧美激情一区二区三区成人 | 精品国产麻豆免费人成网站 | 九九综合va免费看 | 精品乱码久久久久久久 | 精品国偷自产在线 | 性做久久久久久久免费看 | 亚洲一区二区三区无码久久 | 欧美性生交活xxxxxdddd | 国产av一区二区三区最新精品 | 亚洲乱码国产乱码精品精 | 久久99久久99精品中文字幕 | 强奷人妻日本中文字幕 | 熟妇人妻无乱码中文字幕 | 国产人妻久久精品二区三区老狼 | 亚洲人成无码网www | 玩弄少妇高潮ⅹxxxyw | 领导边摸边吃奶边做爽在线观看 | 亚洲人成影院在线无码按摩店 | 97夜夜澡人人爽人人喊中国片 | 色综合久久久无码网中文 | 天堂在线观看www | 国产一区二区三区日韩精品 | 九九久久精品国产免费看小说 | 国产农村妇女高潮大叫 | 熟妇人妻无码xxx视频 | 小sao货水好多真紧h无码视频 | 久久久亚洲欧洲日产国码αv | 中文字幕精品av一区二区五区 | 亚洲s色大片在线观看 | 亚洲性无码av中文字幕 | 亚洲中文字幕成人无码 | 成人女人看片免费视频放人 | 国产超碰人人爽人人做人人添 | 国产精品毛多多水多 | 任你躁国产自任一区二区三区 | 日本免费一区二区三区最新 | 狠狠色噜噜狠狠狠狠7777米奇 | 亚洲高清偷拍一区二区三区 | www国产精品内射老师 | 日本丰满护士爆乳xxxx | 国产亚洲精品久久久久久国模美 | 97人妻精品一区二区三区 | 中文字幕乱码中文乱码51精品 | 日韩精品一区二区av在线 | 国产综合在线观看 | 国内揄拍国内精品少妇国语 | 四十如虎的丰满熟妇啪啪 | 久久无码中文字幕免费影院蜜桃 | 久久久久成人片免费观看蜜芽 | 日韩人妻无码中文字幕视频 | 国产人妻精品一区二区三区 | 精品国偷自产在线视频 | 欧美乱妇无乱码大黄a片 | 色一情一乱一伦一区二区三欧美 | 亚洲国产成人av在线观看 | 午夜精品久久久内射近拍高清 | 国产麻豆精品精东影业av网站 | 99久久人妻精品免费二区 | 国产美女极度色诱视频www | 性啪啪chinese东北女人 | 久久久久久久久888 | 欧美人与禽zoz0性伦交 | 乌克兰少妇xxxx做受 | 国产精品怡红院永久免费 | 性欧美牲交xxxxx视频 | 天下第一社区视频www日本 | 激情五月综合色婷婷一区二区 | 久久久成人毛片无码 | 最新国产麻豆aⅴ精品无码 | 色婷婷欧美在线播放内射 | 大屁股大乳丰满人妻 | 国产精品久久久久7777 | 亚洲日韩av片在线观看 | 国产亚洲精品久久久久久 | 大肉大捧一进一出视频出来呀 | 色婷婷av一区二区三区之红樱桃 | 老太婆性杂交欧美肥老太 | 日韩精品a片一区二区三区妖精 | 国产九九九九九九九a片 | 成人毛片一区二区 | 国产熟女一区二区三区四区五区 | 无码国产乱人伦偷精品视频 | 人妻少妇精品视频专区 | 欧美自拍另类欧美综合图片区 | 欧美喷潮久久久xxxxx | 亚洲爆乳大丰满无码专区 | 1000部啪啪未满十八勿入下载 | 狠狠色丁香久久婷婷综合五月 | 亚洲精品一区二区三区在线观看 | 十八禁真人啪啪免费网站 | 男女作爱免费网站 | 性欧美熟妇videofreesex | 日本精品久久久久中文字幕 | 无码人妻黑人中文字幕 | 久久精品国产精品国产精品污 | 狂野欧美性猛交免费视频 | 久久久久久a亚洲欧洲av冫 | 国产精品.xx视频.xxtv | 一个人看的www免费视频在线观看 | 男人的天堂av网站 | 国产特级毛片aaaaaaa高清 | 亚洲精品午夜国产va久久成人 | 一本精品99久久精品77 | 日韩欧美中文字幕公布 | 乱人伦人妻中文字幕无码久久网 | 亚洲精品国偷拍自产在线麻豆 | 国产97在线 | 亚洲 | 2020久久超碰国产精品最新 | 欧美日本精品一区二区三区 | 欧美野外疯狂做受xxxx高潮 | 亚洲成色www久久网站 | 国产精品久久久av久久久 | 18禁止看的免费污网站 | 丰满人妻翻云覆雨呻吟视频 | 网友自拍区视频精品 | 成人免费视频视频在线观看 免费 | 久久国产36精品色熟妇 | 水蜜桃av无码 | 久久伊人色av天堂九九小黄鸭 | 国产高清av在线播放 | 人妻插b视频一区二区三区 | 麻豆av传媒蜜桃天美传媒 | 无码免费一区二区三区 | 午夜无码人妻av大片色欲 | 亚洲国产精品成人久久蜜臀 | 国产成人无码a区在线观看视频app | 欧美xxxx黑人又粗又长 | 久久99精品国产.久久久久 | 老头边吃奶边弄进去呻吟 | 成 人影片 免费观看 | 无码人妻少妇伦在线电影 | 免费观看激色视频网站 | 波多野结衣aⅴ在线 | 国产av剧情md精品麻豆 | 在线播放免费人成毛片乱码 | 欧美zoozzooz性欧美 | 亚洲色大成网站www | 澳门永久av免费网站 | 中文无码成人免费视频在线观看 | 精品久久久无码中文字幕 | 人妻体内射精一区二区三四 | 成人aaa片一区国产精品 | 亚洲国产精品美女久久久久 | 狠狠噜狠狠狠狠丁香五月 | 中文字幕精品av一区二区五区 | 波多野结衣 黑人 | 国产精品美女久久久久av爽李琼 | 日韩成人一区二区三区在线观看 | 中文字幕无码av激情不卡 | 99国产欧美久久久精品 | 日本乱人伦片中文三区 | 麻豆蜜桃av蜜臀av色欲av | 亚洲国产欧美在线成人 | 日本www一道久久久免费榴莲 | 在教室伦流澡到高潮hnp视频 | 婷婷色婷婷开心五月四房播播 | 久久精品成人欧美大片 | 日本精品人妻无码免费大全 | 精品厕所偷拍各类美女tp嘘嘘 | 亚洲精品成人福利网站 | 精品国产福利一区二区 | 老头边吃奶边弄进去呻吟 | 亚洲熟妇色xxxxx欧美老妇y | 日本丰满护士爆乳xxxx | 无遮挡啪啪摇乳动态图 | 国内精品一区二区三区不卡 | 久久精品人人做人人综合试看 | 国产亚洲精品久久久久久 | 精品水蜜桃久久久久久久 | 一区二区三区乱码在线 | 欧洲 | 综合激情五月综合激情五月激情1 | 免费国产黄网站在线观看 | 国产免费观看黄av片 | 国产精品久免费的黄网站 | 亚洲欧美国产精品专区久久 | 亚洲a无码综合a国产av中文 | 亚洲熟悉妇女xxx妇女av | 亚洲欧美日韩成人高清在线一区 | 老司机亚洲精品影院无码 | 国产手机在线αⅴ片无码观看 | 国产三级精品三级男人的天堂 | 国产真人无遮挡作爱免费视频 | 国产乱子伦视频在线播放 | 男女爱爱好爽视频免费看 | 久久熟妇人妻午夜寂寞影院 | 黑人巨大精品欧美一区二区 | 亚洲男人av香蕉爽爽爽爽 | √8天堂资源地址中文在线 | 亚洲精品国偷拍自产在线观看蜜桃 | 日韩无码专区 | 99视频精品全部免费免费观看 | 国产亚洲精品久久久久久久久动漫 | 国产成人精品视频ⅴa片软件竹菊 | 波多野结衣 黑人 | 亚洲乱码中文字幕在线 | 国产又爽又猛又粗的视频a片 | 亚洲精品无码人妻无码 | 丰满岳乱妇在线观看中字无码 | 亚洲自偷自拍另类第1页 | 国产在线aaa片一区二区99 | 中文无码精品a∨在线观看不卡 | 亚洲国产成人a精品不卡在线 | 久久国产精品萌白酱免费 | 中文字幕无码乱人伦 | 精品欧洲av无码一区二区三区 | 日韩人妻少妇一区二区三区 | 国产成人无码专区 | 欧美黑人乱大交 | 无码人妻丰满熟妇区五十路百度 | 伊人久久大香线蕉亚洲 | 精品亚洲韩国一区二区三区 | 国产av一区二区三区最新精品 | 99国产欧美久久久精品 | 性色欲网站人妻丰满中文久久不卡 | 亚洲精品午夜国产va久久成人 | 国产高清av在线播放 | 色诱久久久久综合网ywww | 国产麻豆精品精东影业av网站 | 国产黑色丝袜在线播放 | 精品无人国产偷自产在线 | 黑人粗大猛烈进出高潮视频 | 99视频精品全部免费免费观看 | 青青青手机频在线观看 | 啦啦啦www在线观看免费视频 | 欧美亚洲国产一区二区三区 | 日韩av激情在线观看 | 波多野结衣一区二区三区av免费 | yw尤物av无码国产在线观看 | 性色欲网站人妻丰满中文久久不卡 | 国产女主播喷水视频在线观看 | 好男人社区资源 | 又黄又爽又色的视频 | 国产香蕉尹人综合在线观看 | 小sao货水好多真紧h无码视频 | 午夜精品久久久久久久 | 精品乱码久久久久久久 | 美女扒开屁股让男人桶 | 国产麻豆精品一区二区三区v视界 | 成人性做爰aaa片免费看不忠 | 丰满妇女强制高潮18xxxx | 国内精品久久毛片一区二区 | 欧美精品在线观看 | 久久久久久久女国产乱让韩 | 一本精品99久久精品77 | 国产精品亚洲五月天高清 | 国产成人精品久久亚洲高清不卡 | 欧美 丝袜 自拍 制服 另类 | 88国产精品欧美一区二区三区 | 红桃av一区二区三区在线无码av | 久久精品国产精品国产精品污 | 国产农村乱对白刺激视频 | 国产人妻人伦精品 | 台湾无码一区二区 | 欧美国产日韩亚洲中文 | 久久精品国产精品国产精品污 | 亚洲精品无码人妻无码 | 国内综合精品午夜久久资源 | 水蜜桃亚洲一二三四在线 | 国产片av国语在线观看 | 牲交欧美兽交欧美 | 欧美一区二区三区视频在线观看 | 国产真实伦对白全集 | 国产精华av午夜在线观看 | 一个人看的视频www在线 | 国产精品丝袜黑色高跟鞋 | 88国产精品欧美一区二区三区 | 一本精品99久久精品77 | av人摸人人人澡人人超碰下载 | 97se亚洲精品一区 | 亚洲中文字幕久久无码 | 天天拍夜夜添久久精品 | 成年美女黄网站色大免费全看 | 亚洲精品国产a久久久久久 | 一本久久a久久精品vr综合 | 2020久久超碰国产精品最新 | 久久精品丝袜高跟鞋 | 在线精品亚洲一区二区 | 午夜福利不卡在线视频 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 中文字幕无线码免费人妻 | 九月婷婷人人澡人人添人人爽 | 一本色道久久综合狠狠躁 | 中文毛片无遮挡高清免费 | 天天躁夜夜躁狠狠是什么心态 | www成人国产高清内射 | 乱码午夜-极国产极内射 | 中文字幕人妻丝袜二区 | 国产人成高清在线视频99最全资源 | а√资源新版在线天堂 | 日韩欧美中文字幕公布 | 一本一道久久综合久久 | 欧洲精品码一区二区三区免费看 | 欧美成人免费全部网站 | 国产成人综合在线女婷五月99播放 | 国产午夜视频在线观看 | 午夜无码区在线观看 | 女人高潮内射99精品 | 亚洲人成网站免费播放 | 色一情一乱一伦 | 兔费看少妇性l交大片免费 | 99久久亚洲精品无码毛片 | 日本在线高清不卡免费播放 | 久久熟妇人妻午夜寂寞影院 | 久久精品国产日本波多野结衣 | 暴力强奷在线播放无码 | 午夜性刺激在线视频免费 | 对白脏话肉麻粗话av | 色欲av亚洲一区无码少妇 | 大屁股大乳丰满人妻 | 日产精品高潮呻吟av久久 | 好男人社区资源 | 中文字幕av无码一区二区三区电影 | 亚洲综合在线一区二区三区 | 国产一区二区不卡老阿姨 | 亚洲理论电影在线观看 | 国产成人亚洲综合无码 | 久久99久久99精品中文字幕 | 中文字幕 亚洲精品 第1页 | 综合人妻久久一区二区精品 | 天堂久久天堂av色综合 | 中文字幕人妻无码一区二区三区 | av人摸人人人澡人人超碰下载 | 午夜精品久久久久久久 | 免费中文字幕日韩欧美 | 中文字幕无线码 | 欧美日韩一区二区免费视频 | 国产欧美精品一区二区三区 | 偷窥村妇洗澡毛毛多 | 无码av最新清无码专区吞精 | 亚洲国产精品美女久久久久 | 人妻中文无码久热丝袜 | 亚洲欧美精品aaaaaa片 | 亚洲色偷偷男人的天堂 | 欧美xxxxx精品 | 特大黑人娇小亚洲女 | 久久久久久久女国产乱让韩 | 久久精品人妻少妇一区二区三区 | 天堂亚洲2017在线观看 | 午夜免费福利小电影 | 任你躁国产自任一区二区三区 | 骚片av蜜桃精品一区 | 特级做a爰片毛片免费69 | 免费无码一区二区三区蜜桃大 | 国产亚洲精品久久久闺蜜 | 最近中文2019字幕第二页 | 日本一卡2卡3卡四卡精品网站 | 波多野结衣av一区二区全免费观看 | 一本加勒比波多野结衣 | 在线观看国产一区二区三区 | 亚洲国产精品一区二区美利坚 | 久久久成人毛片无码 | 久久熟妇人妻午夜寂寞影院 | 日日碰狠狠丁香久燥 | 欧美人与动性行为视频 | 影音先锋中文字幕无码 | 岛国片人妻三上悠亚 | 色综合久久网 | 日韩av无码中文无码电影 | 一个人免费观看的www视频 | 国产成人无码一二三区视频 | 日韩精品乱码av一区二区 | 无码吃奶揉捏奶头高潮视频 | 波多野结衣aⅴ在线 | 男人和女人高潮免费网站 | 国产精品丝袜黑色高跟鞋 | 人妻无码久久精品人妻 | 国产亚av手机在线观看 | 亚洲国产精华液网站w | 色情久久久av熟女人妻网站 | 少妇无码吹潮 | 无码人妻精品一区二区三区下载 | 亚洲欧美色中文字幕在线 | 97久久精品无码一区二区 | 性色欲网站人妻丰满中文久久不卡 | 亚洲娇小与黑人巨大交 | 久久精品女人天堂av免费观看 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 国产一精品一av一免费 | 日韩成人一区二区三区在线观看 | 久久97精品久久久久久久不卡 | 中文字幕 亚洲精品 第1页 | 水蜜桃亚洲一二三四在线 | 国产精品福利视频导航 | 成人性做爰aaa片免费看不忠 | 欧美黑人性暴力猛交喷水 | 国产av剧情md精品麻豆 | 我要看www免费看插插视频 | 久久精品中文字幕大胸 | 国产午夜无码视频在线观看 | 丰满少妇高潮惨叫视频 | 熟女俱乐部五十路六十路av | 久久精品99久久香蕉国产色戒 | 色综合天天综合狠狠爱 | 色 综合 欧美 亚洲 国产 | 天天躁夜夜躁狠狠是什么心态 | 色欲久久久天天天综合网精品 | 国内精品久久久久久中文字幕 | 老头边吃奶边弄进去呻吟 | 天下第一社区视频www日本 | 欧美日韩精品 | 亚洲一区二区三区播放 | 在线亚洲高清揄拍自拍一品区 | 久久精品国产一区二区三区肥胖 | 帮老师解开蕾丝奶罩吸乳网站 | 亚洲精品久久久久avwww潮水 | 国产精品亚洲五月天高清 | 乱人伦中文视频在线观看 | 国产成人一区二区三区别 | 99久久无码一区人妻 | 狂野欧美性猛xxxx乱大交 | 荫蒂添的好舒服视频囗交 | 午夜精品一区二区三区的区别 | 久青草影院在线观看国产 | 国产色精品久久人妻 | 国产美女极度色诱视频www | 久久精品国产精品国产精品污 | 熟女少妇人妻中文字幕 | 亚洲 激情 小说 另类 欧美 | 亚洲精品国产精品乱码视色 | 成人无码精品1区2区3区免费看 | 日本护士毛茸茸高潮 | 一个人看的视频www在线 | 欧美大屁股xxxxhd黑色 | 99久久精品午夜一区二区 | 国产在线精品一区二区三区直播 | 日韩人妻无码一区二区三区久久99 | 最近免费中文字幕中文高清百度 | 伊人久久大香线焦av综合影院 | 日韩人妻无码一区二区三区久久99 | 18精品久久久无码午夜福利 | 人人妻人人澡人人爽欧美一区九九 | 亚无码乱人伦一区二区 | 青春草在线视频免费观看 | 欧美黑人性暴力猛交喷水 | 大地资源网第二页免费观看 | 亚拍精品一区二区三区探花 | 麻豆精品国产精华精华液好用吗 | 久久精品国产日本波多野结衣 | 无码帝国www无码专区色综合 | 精品久久久久久人妻无码中文字幕 | 一个人免费观看的www视频 | 成人影院yy111111在线观看 | 狠狠躁日日躁夜夜躁2020 | 丰满人妻一区二区三区免费视频 | 天堂无码人妻精品一区二区三区 | 性史性农村dvd毛片 | 漂亮人妻洗澡被公强 日日躁 | 国产香蕉尹人视频在线 | 少妇性l交大片 | 国产精品久久久久影院嫩草 | 高清国产亚洲精品自在久久 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 国产成人一区二区三区在线观看 | 无套内谢的新婚少妇国语播放 | 国产亚洲精品久久久久久久久动漫 | 小sao货水好多真紧h无码视频 | 蜜臀aⅴ国产精品久久久国产老师 | 国产内射爽爽大片视频社区在线 | 狠狠色噜噜狠狠狠7777奇米 | 久久久久99精品国产片 | 波多野结衣av一区二区全免费观看 | 精品乱子伦一区二区三区 | 99国产精品白浆在线观看免费 | 久久综合久久自在自线精品自 | 俄罗斯老熟妇色xxxx | 狠狠色色综合网站 | 日产精品高潮呻吟av久久 | 亚洲无人区午夜福利码高清完整版 | 欧洲熟妇色 欧美 | 免费无码的av片在线观看 | 精品人妻中文字幕有码在线 | 日本乱人伦片中文三区 | 夜夜高潮次次欢爽av女 | 国产真实伦对白全集 | 国产精品高潮呻吟av久久4虎 | 欧美丰满老熟妇xxxxx性 | 在线播放无码字幕亚洲 | 日韩成人一区二区三区在线观看 | 中文字幕无码日韩欧毛 | 日本一区二区三区免费播放 | 亚洲精品久久久久久久久久久 | 欧美亚洲日韩国产人成在线播放 | 国产成人精品视频ⅴa片软件竹菊 | 少妇无码一区二区二三区 | 99er热精品视频 | 久久精品人人做人人综合 | 在线播放无码字幕亚洲 | 无码成人精品区在线观看 | 中文字幕乱码中文乱码51精品 | 99国产精品白浆在线观看免费 | 亚洲日本一区二区三区在线 | 欧美成人高清在线播放 | 国产成人无码av一区二区 | 在线 国产 欧美 亚洲 天堂 | 欧美人妻一区二区三区 | 国产一区二区三区日韩精品 | 色欲综合久久中文字幕网 | 日本一区二区更新不卡 | 久久综合九色综合欧美狠狠 | 77777熟女视频在线观看 а天堂中文在线官网 | 国产精品嫩草久久久久 | 成人综合网亚洲伊人 | 色五月五月丁香亚洲综合网 | 性欧美疯狂xxxxbbbb | 欧美人与牲动交xxxx | 999久久久国产精品消防器材 | 久久99国产综合精品 | 中文字幕无码免费久久99 | 中文字幕无码热在线视频 | 少妇无码一区二区二三区 | 狠狠躁日日躁夜夜躁2020 | 国产亚洲欧美日韩亚洲中文色 | 日本护士毛茸茸高潮 | 精品久久久久久人妻无码中文字幕 | 久久精品成人欧美大片 | 高清不卡一区二区三区 | 国产九九九九九九九a片 | 国产亚洲人成a在线v网站 | 欧美乱妇无乱码大黄a片 | 国产日产欧产精品精品app | 人人妻人人澡人人爽欧美一区九九 | 99久久精品午夜一区二区 | 国内精品人妻无码久久久影院蜜桃 | 欧美激情综合亚洲一二区 | 国产特级毛片aaaaaa高潮流水 | 亚洲男人av香蕉爽爽爽爽 | 国产成人精品优优av | 熟女体下毛毛黑森林 | 欧美老人巨大xxxx做受 | 性做久久久久久久免费看 | 成 人 网 站国产免费观看 | 亚洲码国产精品高潮在线 | 国产午夜手机精彩视频 | 99麻豆久久久国产精品免费 | 日本一卡2卡3卡四卡精品网站 | 欧美国产日韩久久mv | 影音先锋中文字幕无码 | 狠狠色丁香久久婷婷综合五月 | 内射巨臀欧美在线视频 | www国产亚洲精品久久久日本 | 国产suv精品一区二区五 | 国产午夜福利亚洲第一 | 人人妻人人澡人人爽欧美一区 | 人妻人人添人妻人人爱 | 最近的中文字幕在线看视频 | 亚洲精品一区二区三区在线 | 国产又粗又硬又大爽黄老大爷视 | 精品国产福利一区二区 | 伊人久久大香线焦av综合影院 | 日本高清一区免费中文视频 | 亚洲综合精品香蕉久久网 | 在线天堂新版最新版在线8 | 国产一区二区三区精品视频 | 亚洲中文字幕va福利 | 亚洲 日韩 欧美 成人 在线观看 | 日韩精品无码一本二本三本色 | 国产午夜手机精彩视频 | 亚洲成a人片在线观看无码3d | 99国产欧美久久久精品 | 国产97人人超碰caoprom | 国产激情精品一区二区三区 | 成人毛片一区二区 | 国产手机在线αⅴ片无码观看 | 亚洲最大成人网站 | 久久精品无码一区二区三区 | 国产成人无码av一区二区 | 亚洲中文字幕在线无码一区二区 | 精品水蜜桃久久久久久久 | 色狠狠av一区二区三区 | 亚洲熟熟妇xxxx | 乱人伦中文视频在线观看 | 亚洲欧洲中文日韩av乱码 | 亚洲人亚洲人成电影网站色 | 婷婷色婷婷开心五月四房播播 | 丝袜美腿亚洲一区二区 | 狠狠色丁香久久婷婷综合五月 | 欧美老妇交乱视频在线观看 | 一本色道久久综合狠狠躁 | 精品欧美一区二区三区久久久 | 免费国产黄网站在线观看 | 美女张开腿让人桶 | 妺妺窝人体色www在线小说 | 国产熟女一区二区三区四区五区 | 精品国产精品久久一区免费式 | 日韩亚洲欧美精品综合 | а天堂中文在线官网 | 国产激情一区二区三区 | 夜夜影院未满十八勿进 | 成人一在线视频日韩国产 | 中文字幕无码日韩专区 | 亚洲国产一区二区三区在线观看 | 正在播放东北夫妻内射 | 成在人线av无码免费 | 久久综合九色综合97网 | 欧美国产日产一区二区 | 久久久久亚洲精品男人的天堂 | 天堂一区人妻无码 | 51国偷自产一区二区三区 | 亚洲第一网站男人都懂 | 狠狠色噜噜狠狠狠7777奇米 | 国产午夜精品一区二区三区嫩草 | 久精品国产欧美亚洲色aⅴ大片 | 日韩 欧美 动漫 国产 制服 | 亚洲日本va午夜在线电影 | 国产艳妇av在线观看果冻传媒 | 女人高潮内射99精品 | 小鲜肉自慰网站xnxx | 成熟人妻av无码专区 | 在线天堂新版最新版在线8 | 色综合视频一区二区三区 | 成熟妇人a片免费看网站 | 色欲av亚洲一区无码少妇 | 妺妺窝人体色www婷婷 | 人人澡人人妻人人爽人人蜜桃 | 无码成人精品区在线观看 | 又紧又大又爽精品一区二区 | 成人性做爰aaa片免费看 | 无套内射视频囯产 | 男女猛烈xx00免费视频试看 | 国产成人无码av一区二区 | 久久国产精品偷任你爽任你 | 老司机亚洲精品影院无码 | 蜜桃视频插满18在线观看 | 免费无码肉片在线观看 | 性史性农村dvd毛片 | 国产精品无码成人午夜电影 | 日本肉体xxxx裸交 | 99久久婷婷国产综合精品青草免费 | 香蕉久久久久久av成人 | 成人免费视频在线观看 | 欧美一区二区三区视频在线观看 | 国产精品二区一区二区aⅴ污介绍 | 亚洲人成影院在线无码按摩店 | 亚洲最大成人网站 | 少妇太爽了在线观看 | 福利一区二区三区视频在线观看 | 一个人看的视频www在线 | 久久久久久久女国产乱让韩 | 成人无码视频免费播放 | 亚洲国产精品美女久久久久 | 国产 精品 自在自线 | 国内丰满熟女出轨videos | 国产精品久久久久久亚洲影视内衣 | 亚洲精品综合一区二区三区在线 | 国产一区二区三区日韩精品 | 中文字幕日产无线码一区 | 高清不卡一区二区三区 | 小sao货水好多真紧h无码视频 | 国产综合色产在线精品 | 丰满人妻一区二区三区免费视频 | 亚洲精品国产精品乱码视色 | 久久精品人人做人人综合试看 | 少妇无码一区二区二三区 | 性做久久久久久久免费看 | 成人亚洲精品久久久久软件 | 国产人妻大战黑人第1集 | 亚洲理论电影在线观看 | 国产 浪潮av性色四虎 | 思思久久99热只有频精品66 | 麻豆果冻传媒2021精品传媒一区下载 | 最新国产乱人伦偷精品免费网站 | 东北女人啪啪对白 | 中文字幕无码热在线视频 | 国产亲子乱弄免费视频 | 国产亚洲人成a在线v网站 | 久久综合给合久久狠狠狠97色 | 最近的中文字幕在线看视频 | 国产精品人妻一区二区三区四 | 国产人妻久久精品二区三区老狼 | 国内老熟妇对白xxxxhd | aⅴ亚洲 日韩 色 图网站 播放 | 日韩欧美中文字幕公布 | 婷婷色婷婷开心五月四房播播 | 一二三四社区在线中文视频 | 欧洲熟妇色 欧美 | 国产亚洲日韩欧美另类第八页 | 亚欧洲精品在线视频免费观看 | 成人亚洲精品久久久久软件 | 亚洲精品鲁一鲁一区二区三区 | 丰满人妻翻云覆雨呻吟视频 | 久久成人a毛片免费观看网站 | 奇米影视7777久久精品人人爽 | 久久人妻内射无码一区三区 | 亚洲午夜久久久影院 | 天干天干啦夜天干天2017 | 国产无套内射久久久国产 | 高潮喷水的毛片 | 国产suv精品一区二区五 | 欧美性生交活xxxxxdddd | 性啪啪chinese东北女人 | 3d动漫精品啪啪一区二区中 | 国内揄拍国内精品人妻 | 欧洲欧美人成视频在线 | 亚洲性无码av中文字幕 | 欧美丰满老熟妇xxxxx性 | 四虎永久在线精品免费网址 | 久久99精品久久久久久动态图 | 亚洲欧美精品aaaaaa片 | 少妇无码一区二区二三区 | 久久久av男人的天堂 | 欧美亚洲日韩国产人成在线播放 | 国产艳妇av在线观看果冻传媒 | 久久国产自偷自偷免费一区调 | 一本无码人妻在中文字幕免费 | 国产手机在线αⅴ片无码观看 | 中文字幕日韩精品一区二区三区 | 人人妻人人澡人人爽人人精品浪潮 | 亚洲乱码日产精品bd | 日韩精品无码免费一区二区三区 | 成年美女黄网站色大免费视频 | 成人亚洲精品久久久久 | 久久午夜无码鲁丝片午夜精品 | 人人妻在人人 | 国产福利视频一区二区 | 亚洲中文无码av永久不收费 | 精品亚洲成av人在线观看 | 精品久久8x国产免费观看 | 国内揄拍国内精品少妇国语 | 成 人影片 免费观看 | 亚洲精品中文字幕 | 2020久久超碰国产精品最新 | 久久久久久亚洲精品a片成人 | 中文字幕av日韩精品一区二区 | 国产激情精品一区二区三区 | 中文字幕乱码人妻二区三区 | 国产性生大片免费观看性 | 老熟妇仑乱视频一区二区 |