精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用 Go 語言實(shí)現(xiàn)二叉搜索樹

開發(fā) 前端
最重要的就是它的有序性,在二叉搜索樹中,每個節(jié)點(diǎn)的值都大于其左子樹中的所有節(jié)點(diǎn)的值,并且小于其右子樹中的所有節(jié)點(diǎn)的值。

二叉樹是一種常見并且非常重要的數(shù)據(jù)結(jié)構(gòu),在很多項(xiàng)目中都能看到二叉樹的身影。

它有很多變種,比如紅黑樹,常被用作 std::map 和 std::set 的底層實(shí)現(xiàn);B 樹和 B+ 樹,廣泛應(yīng)用于數(shù)據(jù)庫系統(tǒng)中。

本文要介紹的二叉搜索樹用的也很多,比如在開源項(xiàng)目 go-zero 中,就被用來做路由管理。

這篇文章也算是一篇前導(dǎo)文章,介紹一些必備知識,下一篇再來介紹具體在 go-zero 中的應(yīng)用。

二叉搜索樹的特點(diǎn)

最重要的就是它的有序性,在二叉搜索樹中,每個節(jié)點(diǎn)的值都大于其左子樹中的所有節(jié)點(diǎn)的值,并且小于其右子樹中的所有節(jié)點(diǎn)的值。

圖片圖片

這意味著通過二叉搜索樹可以快速實(shí)現(xiàn)對數(shù)據(jù)的查找和插入。

Go 語言實(shí)現(xiàn)

本文主要實(shí)現(xiàn)了以下幾種方法:

  • Insert(t):插入一個節(jié)點(diǎn)
  • Search(t):判斷節(jié)點(diǎn)是否在樹中
  • InOrderTraverse():中序遍歷
  • PreOrderTraverse():前序遍歷
  • PostOrderTraverse():后序遍歷
  • Min():返回最小值
  • Max():返回最大值
  • Remove(t):刪除一個節(jié)點(diǎn)
  • String():打印一個樹形結(jié)構(gòu)

下面分別來介紹,首先定義一個節(jié)點(diǎn):

type Node struct {
    key   int
    value Item
    left  *Node //left
    right *Node //right
}

定義樹的結(jié)構(gòu)體,其中包含了鎖,是線程安全的:

type ItemBinarySearchTree struct {
    root *Node
    lock sync.RWMutex
}

插入操作:

func (bst *ItemBinarySearchTree) Insert(key int, value Item) {
    bst.lock.Lock()
    defer bst.lock.Unlock()
    n := &Node{key, value, nil, nil}
    if bst.root == nil {
        bst.root = n
    } else {
        insertNode(bst.root, n)
    }
}

// internal function to find the correct place for a node in a tree
func insertNode(node, newNode *Node) {
    if newNode.key < node.key {
        if node.left == nil {
            node.left = newNode
        } else {
            insertNode(node.left, newNode)
        }
    } else {
        if node.right == nil {
            node.right = newNode
        } else {
            insertNode(node.right, newNode)
        }
    }
}

在插入時,需要判斷插入節(jié)點(diǎn)和當(dāng)前節(jié)點(diǎn)的大小關(guān)系,保證搜索樹的有序性。

中序遍歷:

func (bst *ItemBinarySearchTree) InOrderTraverse(f func(Item)) {
    bst.lock.RLock()
    defer bst.lock.RUnlock()
    inOrderTraverse(bst.root, f)
}

// internal recursive function to traverse in order
func inOrderTraverse(n *Node, f func(Item)) {
    if n != nil {
        inOrderTraverse(n.left, f)
        f(n.value)
        inOrderTraverse(n.right, f)
    }
}

前序遍歷:

func (bst *ItemBinarySearchTree) PreOrderTraverse(f func(Item)) {
    bst.lock.Lock()
    defer bst.lock.Unlock()
    preOrderTraverse(bst.root, f)
}

// internal recursive function to traverse pre order
func preOrderTraverse(n *Node, f func(Item)) {
    if n != nil {
        f(n.value)
        preOrderTraverse(n.left, f)
        preOrderTraverse(n.right, f)
    }
}

后序遍歷:

func (bst *ItemBinarySearchTree) PostOrderTraverse(f func(Item)) {
    bst.lock.Lock()
    defer bst.lock.Unlock()
    postOrderTraverse(bst.root, f)
}

// internal recursive function to traverse post order
func postOrderTraverse(n *Node, f func(Item)) {
    if n != nil {
        postOrderTraverse(n.left, f)
        postOrderTraverse(n.right, f)
        f(n.value)
    }
}

返回最小值:

func (bst *ItemBinarySearchTree) Min() *Item {
    bst.lock.RLock()
    defer bst.lock.RUnlock()
    n := bst.root
    if n == nil {
        return nil
    }
    for {
        if n.left == nil {
            return &n.value
        }
        n = n.left
    }
}

由于樹的有序性,想要得到最小值,一直向左查找就可以了。

返回最大值:

func (bst *ItemBinarySearchTree) Max() *Item {
    bst.lock.RLock()
    defer bst.lock.RUnlock()
    n := bst.root
    if n == nil {
        return nil
    }
    for {
        if n.right == nil {
            return &n.value
        }
        n = n.right
    }
}

查找節(jié)點(diǎn)是否存在:

func (bst *ItemBinarySearchTree) Search(key int) bool {
    bst.lock.RLock()
    defer bst.lock.RUnlock()
    return search(bst.root, key)
}

// internal recursive function to search an item in the tree
func search(n *Node, key int) bool {
    if n == nil {
        return false
    }
    if key < n.key {
        return search(n.left, key)
    }
    if key > n.key {
        return search(n.right, key)
    }
    return true
}

刪除節(jié)點(diǎn):

func (bst *ItemBinarySearchTree) Remove(key int) {
    bst.lock.Lock()
    defer bst.lock.Unlock()
    remove(bst.root, key)
}

// internal recursive function to remove an item
func remove(node *Node, key int) *Node {
    if node == nil {
        return nil
    }
    if key < node.key {
        node.left = remove(node.left, key)
        return node
    }
    if key > node.key {
        node.right = remove(node.right, key)
        return node
    }
    // key == node.key
    if node.left == nil && node.right == nil {
        node = nil
        return nil
    }
    if node.left == nil {
        node = node.right
        return node
    }
    if node.right == nil {
        node = node.left
        return node
    }
    leftmostrightside := node.right
    for {
        //find smallest value on the right side
        if leftmostrightside != nil && leftmostrightside.left != nil {
            leftmostrightside = leftmostrightside.left
        } else {
            break
        }
    }
    node.key, node.value = leftmostrightside.key, leftmostrightside.value
    node.right = remove(node.right, node.key)
    return node
}

刪除操作會復(fù)雜一些,分三種情況來考慮:

  1. 如果要刪除的節(jié)點(diǎn)沒有子節(jié)點(diǎn),只需要直接將父節(jié)點(diǎn)中,指向要刪除的節(jié)點(diǎn)指針置為 nil 即可
  2. 如果刪除的節(jié)點(diǎn)只有一個子節(jié)點(diǎn),只需要更新父節(jié)點(diǎn)中,指向要刪除節(jié)點(diǎn)的指針,讓它指向刪除節(jié)點(diǎn)的子節(jié)點(diǎn)即可
  3. 如果刪除的節(jié)點(diǎn)有兩個子節(jié)點(diǎn),我們需要找到這個節(jié)點(diǎn)右子樹中的最小節(jié)點(diǎn),把它替換到要刪除的節(jié)點(diǎn)上。然后再刪除這個最小節(jié)點(diǎn),因?yàn)樽钚」?jié)點(diǎn)肯定沒有左子節(jié)點(diǎn),所以可以應(yīng)用第二種情況刪除這個最小節(jié)點(diǎn)即可

最后是一個打印樹形結(jié)構(gòu)的方法,在實(shí)際項(xiàng)目中其實(shí)并沒有實(shí)際作用:

func (bst *ItemBinarySearchTree) String() {
    bst.lock.Lock()
    defer bst.lock.Unlock()
    fmt.Println("------------------------------------------------")
    stringify(bst.root, 0)
    fmt.Println("------------------------------------------------")
}

// internal recursive function to print a tree
func stringify(n *Node, level int) {
    if n != nil {
        format := ""
        for i := 0; i < level; i++ {
            format += "       "
        }
        format += "---[ "
        level++
        stringify(n.left, level)
        fmt.Printf(format+"%d\n", n.key)
        stringify(n.right, level)
    }
}

單元測試

下面是一段測試代碼:

func fillTree(bst *ItemBinarySearchTree) {
    bst.Insert(8, "8")
    bst.Insert(4, "4")
    bst.Insert(10, "10")
    bst.Insert(2, "2")
    bst.Insert(6, "6")
    bst.Insert(1, "1")
    bst.Insert(3, "3")
    bst.Insert(5, "5")
    bst.Insert(7, "7")
    bst.Insert(9, "9")
}

func TestInsert(t *testing.T) {
    fillTree(&bst)
    bst.String()

    bst.Insert(11, "11")
    bst.String()
}

// isSameSlice returns true if the 2 slices are identical
func isSameSlice(a, b []string) bool {
    if a == nil && b == nil {
        return true
    }
    if a == nil || b == nil {
        return false
    }
    if len(a) != len(b) {
        return false
    }
    for i := range a {
        if a[i] != b[i] {
            return false
        }
    }
    return true
}

func TestInOrderTraverse(t *testing.T) {
    var result []string
    bst.InOrderTraverse(func(i Item) {
        result = append(result, fmt.Sprintf("%s", i))
    })
    if !isSameSlice(result, []string{"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"}) {
        t.Errorf("Traversal order incorrect, got %v", result)
    }
}

func TestPreOrderTraverse(t *testing.T) {
    var result []string
    bst.PreOrderTraverse(func(i Item) {
        result = append(result, fmt.Sprintf("%s", i))
    })
    if !isSameSlice(result, []string{"8", "4", "2", "1", "3", "6", "5", "7", "10", "9", "11"}) {
        t.Errorf("Traversal order incorrect, got %v instead of %v", result, []string{"8", "4", "2", "1", "3", "6", "5", "7", "10", "9", "11"})
    }
}

func TestPostOrderTraverse(t *testing.T) {
    var result []string
    bst.PostOrderTraverse(func(i Item) {
        result = append(result, fmt.Sprintf("%s", i))
    })
    if !isSameSlice(result, []string{"1", "3", "2", "5", "7", "6", "4", "9", "11", "10", "8"}) {
        t.Errorf("Traversal order incorrect, got %v instead of %v", result, []string{"1", "3", "2", "5", "7", "6", "4", "9", "11", "10", "8"})
    }
}

func TestMin(t *testing.T) {
    if fmt.Sprintf("%s", *bst.Min()) != "1" {
        t.Errorf("min should be 1")
    }
}

func TestMax(t *testing.T) {
    if fmt.Sprintf("%s", *bst.Max()) != "11" {
        t.Errorf("max should be 11")
    }
}

func TestSearch(t *testing.T) {
    if !bst.Search(1) || !bst.Search(8) || !bst.Search(11) {
        t.Errorf("search not working")
    }
}

func TestRemove(t *testing.T) {
    bst.Remove(1)
    if fmt.Sprintf("%s", *bst.Min()) != "2" {
        t.Errorf("min should be 2")
    }
}

上文中的全部源碼都是經(jīng)過測試的,可以直接運(yùn)行,并且已經(jīng)上傳到了 GitHub,需要的同學(xué)可以自取。

源碼地址:

  • https://github.com/yongxinz/go-example
責(zé)任編輯:武曉燕 來源: AlwaysBeta
相關(guān)推薦

2024-01-17 07:36:50

二叉搜索聯(lián)系簿

2022-12-26 00:51:33

雙向鏈表二叉搜索樹

2021-08-31 11:35:24

二叉搜索樹迭代法公共祖先

2021-12-07 06:55:17

二叉搜索樹鏈表

2020-10-11 16:56:48

二叉搜索樹代碼開發(fā)

2021-09-02 11:31:28

二叉搜索樹迭代法公共祖先

2022-01-11 10:01:25

二叉搜索樹數(shù)量

2021-09-03 08:58:00

二叉搜索樹節(jié)點(diǎn)

2020-04-27 07:05:58

二叉樹左子樹右子樹

2020-08-12 08:56:30

代碼凱撒密碼函數(shù)

2021-04-20 08:37:14

數(shù)據(jù)結(jié)構(gòu)二叉樹

2023-02-13 08:02:08

哈希函數(shù)哈希表搜索樹

2021-09-07 11:01:41

二叉搜索樹序數(shù)組

2021-08-26 11:31:11

二叉樹數(shù)據(jù)結(jié)構(gòu)算法

2021-04-06 08:20:24

二叉搜索樹數(shù)據(jù)結(jié)構(gòu)算法

2021-10-11 06:38:52

遞歸二叉搜索樹

2021-09-06 10:38:50

二叉搜索樹遞歸

2020-09-23 18:25:40

算法二叉樹多叉樹

2023-08-29 08:31:13

B+樹數(shù)據(jù)索引

2009-08-11 13:29:57

C#二叉樹遍歷
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

91在线视频免费播放| 国产熟女高潮一区二区三区| 麻豆视频在线观看免费| 激情都市一区二区| 欧美激情一二区| 魔女鞋交玉足榨精调教| 电影91久久久| 欧美日韩一区二区免费在线观看| 亚欧精品在线| 欧美一级一区二区三区| 久久亚洲综合| 久久99青青精品免费观看| 精品无码一区二区三区| 二区三区精品| 91久久国产综合久久| 免费看黄色a级片| 日本黄在线观看| 国产呦精品一区二区三区网站| 91国在线精品国内播放 | av亚洲精华国产精华| 国产精品色婷婷视频| 国产无遮挡免费视频| 日韩在线观看| 国产视频精品xxxx| jjzzjjzz欧美69巨大| 欧美成人福利| 色综合久久99| 精品久久一二三| 在线中文字幕视频观看| 中文字幕精品一区二区精品绿巨人| 丁香婷婷久久久综合精品国产| 国产精品午夜一区二区| 国产毛片久久| 91精品国产91久久久久久不卡| 色在线观看视频| 欧美成人精品一区二区三区在线看| 视频在线在亚洲| 亚洲黄色性网站| 婷婷亚洲婷婷综合色香五月| 熟妇人妻一区二区三区四区| 国产一区二区免费看| 国产精品人成电影在线观看| 亚洲中文一区二区| 久久成人在线| 全球成人中文在线| 中日韩精品视频在线观看| 好吊日精品视频| 欧美成人手机在线| 一区二区视频免费看| 国产精品99久久| 中文字幕亚洲综合久久筱田步美| 四虎影成人精品a片| 亚洲桃色综合影院| 亚洲人成在线一二| 美国黄色特级片| 欧美成人激情| 久久九九精品99国产精品| 欧美xxxooo| 亚洲最大黄网| 欧美激情精品久久久| www.av视频在线观看| 亚洲二区视频| 91大神福利视频在线| 91蜜桃视频在线观看| 国产乱码精品| 国产精品久久中文| 国产乱人乱偷精品视频a人人澡| 久色婷婷小香蕉久久| 成人啪啪免费看| 国产丰满果冻videossex| 国产69精品一区二区亚洲孕妇| av成人观看| 天天操天天舔天天干| 成人国产亚洲欧美成人综合网| 精品国产一区二区三| 国产美女性感在线观看懂色av| 国产亚洲精品久| 影音先锋男人的网站| 黄色在线视频网站| 亚洲国产日日夜夜| 欧美牲交a欧美牲交aⅴ免费真| 国产一区二区主播在线| 欧美日韩和欧美的一区二区| 九九九九九九九九| 国产精品久久久久久久久久白浆| 精品久久久三级丝袜| 国产中文字幕一区二区| 不卡在线一区二区| 久久99精品久久久久久噜噜| 久久精品一二区| 久久精品理论片| 好看的日韩精品| 午夜免费福利在线观看| 国产精品欧美极品| 国产美女在线一区| 成人在线免费电影网站| 日韩欧美www| 国产jk精品白丝av在线观看| 影音先锋日韩在线| 日本不卡高字幕在线2019| 91av国产精品| 国产成人啪午夜精品网站男同| 欧美日韩国产高清视频| 性欧美videos高清hd4k| 91久久精品一区二区三| av天堂一区二区| 日韩在线二区| 国产999精品久久久影片官网| 97精品人妻一区二区三区在线| 波多野洁衣一区| 手机在线视频你懂的| 正在播放日韩精品| 精品国精品国产| 久久久精品少妇| 99精品视频免费观看| 91久久嫩草影院一区二区| 欧洲亚洲精品视频| 婷婷夜色潮精品综合在线| 亚洲黄色片免费| 欧美综合久久| 欧美最近摘花xxxx摘花| 亚洲乱码国产乱码精品精软件| 国产精品天美传媒沈樵| 青青青在线播放| silk一区二区三区精品视频| 久久久av一区| 无码人妻熟妇av又粗又大| 99re热这里只有精品视频| av磁力番号网| 四虎精品永久免费| 亚洲最新av在线| 黄色片视频免费| 91在线视频免费观看| 欧美中日韩在线| 久久丁香四色| 超薄丝袜一区二区| 国产伦一区二区| 国产精品久久久久aaaa| 一区二区三区视频网| 国产精品探花在线观看| 日韩美女主播视频| 日本一区二区三区在线观看视频| 亚洲r级在线视频| 亚洲精品无码一区二区| 国产真实久久| 国产伦精品一区二区三区视频免费| 在线中文字幕电影| 日韩欧美国产麻豆| 久青草免费视频| 成人一区二区三区在线观看| 91免费国产精品| 999久久久精品一区二区| 九九精品在线观看| 亚洲精品18在线观看| 亚洲制服欧美中文字幕中文字幕| 中文字幕人妻熟女人妻a片| 中文字幕人成人乱码| 91日本在线视频| 主播国产精品| 亚洲电影免费观看高清完整版在线| 久久精品免费av| av影院午夜一区| 精品视频无码一区二区三区| 国产亚洲一区二区三区啪| 国产精品69av| 麻豆视频在线观看免费网站| 欧美一级搡bbbb搡bbbb| 国产精品 欧美 日韩| 99久久精品免费观看| 色诱视频在线观看| 国产精品99一区二区三区| 亚洲一区二区三区视频| 欧美卡一卡二| 亚洲美女性生活视频| 中文字幕在线一| 亚洲男人的天堂网| av网页在线观看| 久久这里只有| 吴梦梦av在线| 成人av综合网| 国产第一区电影| 成人免费网址| 亚洲伦理中文字幕| 一级黄色大片免费观看| 洋洋成人永久网站入口| 大又大又粗又硬又爽少妇毛片 | 成人黄色一区二区| 香蕉国产精品| 久久国产精品亚洲va麻豆| 成人在线免费| 91精品国产99| 日本不卡在线| 国产婷婷色综合av蜜臀av| 亚洲图片小说视频| 亚洲二区在线观看| 精品视频第一页| 99久久精品久久久久久清纯| 亚洲综合激情视频| 午夜亚洲性色视频| 久久av喷吹av高潮av| 国内亚洲精品| 国产日韩久久| 国产一区二区三区国产精品| 51ⅴ精品国产91久久久久久| 国产在线1区| 亚洲欧美国产一区二区三区| 国产成人精品免费看视频| 一本到三区不卡视频| 欧美黄色一级网站| 国产日韩一级二级三级| av手机免费看| 一本到高清视频免费精品| 婷婷色中文字幕| 国产精品美女视频| 玖草视频在线观看| 国产精品18久久久久久久久久久久| 欧美黄网站在线观看| 欧美视频一区| 中文字幕欧美日韩一区二区| 亚洲精品一级二级三级| 春色成人在线视频| 精品视频在线观看网站| 国产精品扒开腿做爽爽爽视频| 91av久久| 欧美激情精品久久久久久免费印度| 午夜看片在线免费| 亚洲色图50p| 久草福利在线视频| 日韩精品久久久久久久玫瑰园| 午夜精品久久久久久久99热黄桃 | 凹凸国产熟女精品视频| 欧美精品91| av电影一区二区三区| 99精品全国免费观看视频软件| 免费一区二区三区在在线视频| 成人av动漫| 国产精品亚洲不卡a| 欧美大片91| 亚洲综合在线做性| 国产精品美女久久久久人| 成人网欧美在线视频| 久久精品国产精品亚洲毛片| 国产精品久久999| 91九色综合| 国产精品国语对白| 福利一区二区| 国产日韩专区在线| 91成人小视频| 91免费在线观看网站| 日韩一级淫片| 成人国产一区二区| 久久久亚洲欧洲日产| 国产视频99| 少妇久久久久| 日韩av高清| 日韩国产一区二区| 国产精品久久成人免费观看| 一区二区三区在线| 久久综合久久久久| 国产亚洲毛片在线| 成人性视频欧美一区二区三区| 日韩精品电影一区亚洲| 色综合色综合色综合色综合| 麻豆国产欧美一区二区三区| 玖玖爱视频在线| 国产电影一区在线| 性生活在线视频| 97精品久久久久中文字幕 | 91n.com在线观看| 美女视频黄 久久| 亚洲天堂一区二区在线观看| 国产福利不卡视频| 无码人妻精品一区二区三应用大全| 国产午夜亚洲精品理论片色戒 | 国产精品黄色av| 伊人久久大香线蕉综合影院首页| 91视频网页| 色婷婷av一区二区三区丝袜美腿| 天天爽天天狠久久久| 女人香蕉久久**毛片精品| www..com日韩| 日本美女一区二区| 成人做爰69片免费| 日本一区二区免费在线 | 狠狠色狠狠色综合日日tαg| 成人一对一视频| 美女任你摸久久 | 欧美国产一区在线| 欧美精品久久久久性色| 欧美午夜影院在线视频| 91国内精品久久久| 亚洲精品国偷自产在线99热| 1024国产在线| 国产91成人在在线播放| 成人噜噜噜噜| 欧美精品一区二区三区久久| 一区二区日韩欧美| 91香蕉视频污版| 成人国产精品免费观看视频| 日本人亚洲人jjzzjjz| 亚洲午夜在线视频| 夜夜爽8888| 亚洲精品视频免费| 青草视频在线免费直播| 国产精品免费一区二区三区都可以 | 亚洲精品国产成人影院| 欧美xxxxx在线视频| 国产黄色成人av| 欧美88888| 色综合激情五月| 日日夜夜精品免费| 美女视频久久黄| jizz欧美| 久久青青草综合| 一区久久精品| 91亚洲一线产区二线产区| 国产精品青草综合久久久久99| www.国产色| 亚洲国产精品国自产拍av秋霞| 韩国中文字幕在线| 国产欧美中文字幕| 成人精品电影| 三级4级全黄60分钟| 成人av在线网| 久久精品免费av| 九一国产精品视频| 日韩影片中文字幕| 国产91一区二区三区| 日韩片欧美片| 免费看污污网站| 久久尤物电影视频在线观看| 久久久久久久久久91| 6080亚洲精品一区二区| 中文日本在线观看| 国产精品久久久久av免费| 亚欧日韩另类中文欧美| 熟女少妇在线视频播放| 99久久夜色精品国产网站| 国产精品白嫩白嫩大学美女| 51精品久久久久久久蜜臀| 日本高清中文字幕在线| 国产精品丝袜一区二区三区| 日韩黄色大片网站| 中文字幕 91| 国产精品女同一区二区三区| 中文在线免费看视频| 在线观看国产成人av片| 国产综合色在线观看| 亚洲精品8mav| 久久福利视频一区二区| 日本二区三区视频| 正在播放亚洲一区| av免费看在线| 国产精品视频入口| 99在线精品免费视频九九视| 国产福利短视频| 色婷婷激情综合| av网站无病毒在线| 亚洲伊人一本大道中文字幕| 欧美黄在线观看| www.啪啪.com| 色视频一区二区| 日本中文字幕在线2020| 亚洲xxxx18| 亚洲激情国产| 女人又爽又黄免费女仆| 欧美日韩视频一区二区| 成人日日夜夜| 精品国产乱码久久久久久88av| 乱人伦精品视频在线观看| 精品人妻中文无码av在线| 欧美日韩视频在线第一区| 日本电影在线观看| 国产一区免费在线| 日韩电影在线看| 欧美成欧美va| 国产视频久久久久| 亚洲一区二区小说| 9久久9毛片又大又硬又粗| 国产欧美日韩亚州综合 | 欧洲一区二区三区在线| 日本免费中文字幕在线| 国产欧美日韩综合精品二区| 久久国产日韩| 精国产品一区二区三区a片| 亚洲国产天堂久久综合网| 日本精品网站| 久久久久久久久久伊人| 久久亚洲精品国产精品紫薇| 91亚洲欧美激情| 777777777亚洲妇女| 国产精品国产一区| 在线观看国产网站| 在线不卡的av| 美脚恋feet久草欧美| 国产成人生活片| 欧美韩日一区二区三区四区| 好吊视频一二三区| 国产精品视频一区国模私拍| 亚洲黄色成人|