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

數據結構與算法系列 - 深度優先和廣度優先

開發 前端 算法
本篇討論深度優先搜索和廣度優先搜索相關內容。

前言

數據結構與算法系列(完成部分):

  1. 時間復雜度和空間復雜度分析
  2. 數組的基本實現和特性
  3. 鏈表和跳表的基本實現和特性
  4. 棧、隊列、優先隊列、雙端隊列的實現與特性
  5. 哈希表、映射、集合的實現與特性
  6. 樹、二叉樹、二叉搜索樹的實現與特性
  7. 堆和二叉堆的實現和特性
  8. 圖的實現和特性
  9. 遞歸的實現、特性以及思維要點
  10. 分治、回溯的實現和特性
  11. 深度優先搜索、廣度優先搜索的實現和特性
  12. 貪心算法的實現和特性
  13. 二分查找的實現和特性
  14. 動態規劃的實現及關鍵點
  15. Tire樹的基本實現和特性
  16. 并查集的基本實現和特性
  17. 剪枝的實現和特性
  18. 雙向BFS的實現和特性
  19. 啟發式搜索的實現和特性
  20. AVL樹和紅黑樹的實現和特性
  21. 位運算基礎與實戰要點
  22. 布隆過濾器的實現及應用
  23. LRU Cache的實現及應用
  24. 初級排序和高級排序的實現和特性
  25. 字符串算法

PS:大部分已經完成在公眾號或者GitHub上,后面陸續會在頭條補充鏈接(不允許有外部鏈接)

本篇討論深度優先搜索和廣度優先搜索相關內容。

關于搜索&遍歷

對于搜索來說,我們絕大多數情況下處理的都是叫 “所謂的暴力搜索” ,或者是說比較簡單樸素的搜索,也就是說你在搜索的時候沒有任何所謂的智能的情況在里面考慮,很多情況下它做的一件事情就是把所有的結點全部遍歷一次,然后找到你要的結果。

基于這樣的一個數據結構,如果這個數據結構本身是沒有任何特點的,也就是說是一個很普通的樹或者很普通的圖。那么我們要做的一件事情就是遍歷所有的結點。同時保證每個點訪問一次且僅訪問一次,最后找到結果。

那么我們先把搜索整個先化簡情況,我們就收縮到在樹的這種情況下來進行搜索。

如果我們要找到我們需要的一個值,在這個樹里面我們要怎么做?那么毫無疑問就是從根這邊開始先搜左子樹,然后再往下一個一個一個一個點走過去,然后走完來之后再走右子樹,直到找到我們的點,這就是我們所采用的方式。

 

再回到我們數據結構定義,它只有左子樹和右子樹。

我們要實現這樣一個遍歷或者搜索的話,毫無疑問我們要保證的事情就是

  • 每個結點都要訪問一次
  • 每個結點僅僅要訪問一次
  • 對于結點訪問的順序不限
  • 深度優先:Depth First Search
  • 廣度優先:Breadth First Search

僅訪問一次的意思就是代表我們在搜索中,我們不想做過多無用的訪問,不然的話我們的訪問的效率會非常的慢。

當然的話還可以有其余的搜索,其余的搜索的話就不再是深度優先或者廣度優先了,而是按照優先級優先 。當然你也可以隨意定義,比如說從中間優先類似于其他的東西,但只不過的話你定義的話要有現實中的場景。所以你可以認為是一般來說就是深度優先、廣度優先,另外的話就是優先級優先。按照優先級優先搜索的話,其實更加適用于現實中的很多業務場景,而這樣的算法我們一般把它稱為啟發式搜索,更多應用在深度學習領域。而這種比如說優先級優先的話,在很多時候現在已經應用在各種推薦算法和高級的搜索算法,讓你搜出你中間最感興趣的內容,以及每天打開抖音、快手的話就給你推薦你最感興趣的內容,其實就是這個原因。

深度優先搜索(DFS)

遞歸寫法

遞歸的寫法,一開始就是遞歸的終止條件,然后處理當前的層,然后再下轉。

  • 那么處理當前層的話就是相當于訪問了結點 node,然后把這個結點 node 加到已訪問的結點里面去;
  • 那么終止條件的話,就是如果這個結點之前已經訪問過了,那就不管了;
  • 那么下轉的話,就是走到它的子結點,二叉樹來說的話就是左孩子和右孩子,如果是圖的話就是連同的相鄰結點,如果是多叉樹的話這里就是一個children,然后把所有的children的話遍歷一次。

1.二叉樹模版

 

Java 版本

  1. //C/C++ 
  2. //遞歸寫法: 
  3. map<intint> visited; 
  4.  
  5. void dfs(Node* root) { 
  6.   // terminator 
  7.   if (!root) return ; 
  8.  
  9.   if (visited.count(root->val)) { 
  10.     // already visited 
  11.     return ; 
  12.   } 
  13.  
  14.   visited[root->val] = 1; 
  15.  
  16.   // process current node here.  
  17.   // ... 
  18.   for (int i = 0; i < root->children.size(); ++i) { 
  19.     dfs(root->children[i]); 
  20.   } 
  21.   return ; 

Python 版本

  1. #Python 
  2. visited = set()  
  3.  
  4. def dfs(node, visited): 
  5.     if node in visited: # terminator 
  6.         # already visited  
  7.         return  
  8.  
  9.     visited.add(node)  
  10.  
  11.     # process current node here.  
  12.     ... 
  13.     for next_node in node.children():  
  14.         if next_node not in visited:  
  15.             dfs(next_node, visited) 

C/C++ 版本

  1. //C/C++ 
  2. //遞歸寫法: 
  3. map<intint> visited; 
  4.  
  5. void dfs(Node* root) { 
  6.   // terminator 
  7.   if (!root) return ; 
  8.  
  9.   if (visited.count(root->val)) { 
  10.     // already visited 
  11.     return ; 
  12.   } 
  13.  
  14.   visited[root->val] = 1; 
  15.  
  16.   // process current node here.  
  17.   // ... 
  18.   for (int i = 0; i < root->children.size(); ++i) { 
  19.     dfs(root->children[i]); 
  20.   } 
  21.   return ; 

JavaScript版本

  1. visited = set()  
  2. def dfs(node, visited): 
  3.     if node in visited: # terminator 
  4.         # already visited  
  5.         return  
  6.     visited.add(node)  
  7.     # process current node here.  
  8.     ... 
  9.     for next_node in node.children():  
  10.       if next_node not in visited:  
  11.         dfs(next_node, visited) 

2.多叉樹模版

  1. visited = set()  
  2. def dfs(node, visited): 
  3.     if node in visited: # terminator 
  4.         # already visited  
  5.         return  
  6.     visited.add(node)  
  7.     # process current node here.  
  8.     ... 
  9.     for next_node in node.children():  
  10.       if next_node not in visited:  
  11.         dfs(next_node, visited) 

非遞歸寫法

Python版本

  1. #Python 
  2. def DFS(self, tree):  
  3.  
  4.     if tree.root is None:  
  5.         return []  
  6.  
  7.     visited, stack = [], [tree.root] 
  8.  
  9.     while stack:  
  10.         node = stack.pop()  
  11.         visited.add(node) 
  12.  
  13.         process (node)  
  14.         nodes = generate_related_nodes(node)  
  15.         stack.push(nodes)  
  16.  
  17.     # other processing work  
  18.     ... 

C/C++版本

  1. //C/C++ 
  2. //非遞歸寫法: 
  3. void dfs(Node* root) { 
  4.   map<intint> visited; 
  5.   if(!root) return ; 
  6.  
  7.   stack<Node*> stackNode; 
  8.   stackNode.push(root); 
  9.  
  10.   while (!stackNode.empty()) { 
  11.     Node* node = stackNode.top(); 
  12.     stackNode.pop(); 
  13.     if (visited.count(node->val)) continue
  14.     visited[node->val] = 1; 
  15.  
  16.  
  17.     for (int i = node->children.size() - 1; i >= 0; --i) { 
  18.         stackNode.push(node->children[i]); 
  19.     } 
  20.   } 
  21.  
  22.   return ; 

遍歷順序

我們看深度優先搜索或者深度優先遍歷的話,它的整個遍歷順序毫無疑問根節點 1 永遠最先開始的,接下來往那個分支走其實都一樣的,我們簡單起見就是從最左邊開始走,那么它深度優先的話就會走到底。

參考多叉樹模版我們可以在腦子里面或者畫一個圖把它遞歸起來的話,把遞歸的狀態樹畫出來,就是這么一個結構。

 

  • 就比如說它開始剛進來的話,傳的是 root 的話,root 就會先放到 visited 里面,表示 root 已經被 visit,被 visited之后就從 root.childern里面找 next_node,所有它的next_node都沒有被訪問過的,所以它就會先訪問最左邊的這個結點,這里注意當它最左邊這個結點先拿出來了,判斷沒有在 visited里面,因為除了 root之外其他結點都沒有被 visited過,那么沒有的話它就直接調dfs,next_node 就是把最左邊結點放進去,再把 visited也一起放進去。
  • 遞歸調用的一個特殊,它不會等這個循環跑完,它就直接推進到下一層了,也就是當前夢境的話這里寫了一層循環,但是在第一層循環的時候,我就要開始下鉆到新的一層夢境里面去了。

圖的遍歷順序

廣度優先搜索(BFS)

廣度優先遍歷它就不再是用遞歸也不再是用棧了,而是用所謂的隊列。你可以把它想象成一個水滴,滴到1這個位置,然后它的水波紋一層一層一層擴散出去就行了。

兩者對比

BFS代碼模板

  1. //Java 
  2. public class TreeNode { 
  3.     int val; 
  4.     TreeNode left
  5.     TreeNode right
  6.  
  7.     TreeNode(int x) { 
  8.         val = x; 
  9.     } 
  10.  
  11. public List<List<Integer>> levelOrder(TreeNode root) { 
  12.     List<List<Integer>> allResults = new ArrayList<>(); 
  13.     if (root == null) { 
  14.         return allResults; 
  15.     } 
  16.     Queue<TreeNode> nodes = new LinkedList<>(); 
  17.     nodes.add(root); 
  18.     while (!nodes.isEmpty()) { 
  19.         int size = nodes.size(); 
  20.         List<Integer> results = new ArrayList<>(); 
  21.         for (int i = 0; i < size; i++) { 
  22.             TreeNode node = nodes.poll(); 
  23.             results.add(node.val); 
  24.             if (node.left != null) { 
  25.                 nodes.add(node.left); 
  26.             } 
  27.             if (node.right != null) { 
  28.                 nodes.add(node.right); 
  29.             } 
  30.         } 
  31.         allResults.add(results); 
  32.     } 
  33.     return allResults; 

  1. # Python 
  2. def BFS(graph, start, end): 
  3.     visited = set() 
  4.     queue = []  
  5.     queue.append([start])  
  6.     while queue:  
  7.         node = queue.pop()  
  8.         visited.add(node) 
  9.         process(node)  
  10.         nodes = generate_related_nodes(node)  
  11.         queue.push(nodes) 
  12.     # other processing work  
  13.     ... 

  1. // C/C++ 
  2. void bfs(Node* root) { 
  3.   map<intint> visited; 
  4.   if(!root) return ; 
  5.  
  6.   queue<Node*> queueNode; 
  7.   queueNode.push(root); 
  8.  
  9.   while (!queueNode.empty()) { 
  10.     Node* node = queueNode.top(); 
  11.     queueNode.pop(); 
  12.     if (visited.count(node->val)) continue
  13.     visited[node->val] = 1; 
  14.  
  15.     for (int i = 0; i < node->children.size(); ++i) { 
  16.         queueNode.push(node->children[i]); 
  17.     } 
  18.   } 
  19.  
  20.   return ; 

  1. //JavaScript 
  2. const bfs = (root) => { 
  3.   let result = [], queue = [root] 
  4.   while (queue.length > 0) { 
  5.     let level = [], n = queue.length 
  6.     for (let i = 0; i < n; i++) { 
  7.       let node = queue.pop() 
  8.       level.push(node.val)  
  9.       if (node.left) queue.unshift(node.left
  10.       if (node.right) queue.unshift(node.right
  11.     } 
  12.     result.push(level
  13.   } 
  14.   return result 
  15. }; 

 

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2021-04-28 07:59:21

深度優先搜索

2023-04-14 08:07:20

數據結構算法搜索

2025-02-26 05:00:00

DFS算法遞歸

2020-04-16 13:48:27

DFS BFS優先遍歷

2021-06-11 06:10:09

Python數據結構算法

2021-04-19 09:08:19

無向圖數據結構

2023-11-06 07:46:22

圖算法數據結構

2020-10-21 14:57:04

數據結構算法圖形

2023-03-08 08:03:09

數據結構算法歸并排序

2023-10-27 07:04:20

2019-03-29 09:40:38

數據結構算法前端

2017-03-20 13:09:33

Swift廣度優先搜索手游開發

2023-03-07 08:02:07

數據結構算法數列

2023-03-02 08:15:13

2023-03-10 08:07:39

數據結構算法計數排序

2020-08-12 08:30:20

數據結構算法

2023-04-27 09:13:20

排序算法數據結構

2015-08-24 15:06:13

大數據

2023-02-08 07:52:36

跳躍表數據結構

2023-10-30 08:31:42

數據結構算法
點贊
收藏

51CTO技術棧公眾號

伊人久久久久久久久久久| 91在线精品秘密一区二区| 亚洲最新视频在线| 一区二区三区人妻| a毛片不卡免费看片| 97成人超碰视| 成人欧美一区二区三区在线 | 亚洲欧美一区二区视频| 97超碰资源| 黄色av网站免费观看| 99久久婷婷国产综合精品电影√| 精品国产免费久久| 亚洲一区二区蜜桃| 欧美伦理免费在线| 亚洲国产成人在线| 成人在线免费网站| 中文亚洲av片在线观看| 狠狠爱成人网| 色综合亚洲精品激情狠狠| 日本少妇一区二区三区| 蜜桃精品在线| 亚洲图片有声小说| 亚洲精品成人自拍| 亚洲 另类 春色 国产| 韩国av一区二区三区在线观看| 91av在线免费观看视频| 欧美激情图片小说| 九一国产精品| 亚洲国产成人av在线| 久国产精品视频| 日韩精品99| 亚洲国产精品久久人人爱蜜臀| 色婷婷精品国产一区二区三区| www.色播.com| 久久国产三级精品| 日韩美女中文字幕| 成年人免费看毛片| 国产一区二区三区四区三区四| 亚洲最新中文字幕| 娇妻被老王脔到高潮失禁视频| 美女主播精品视频一二三四| 日韩欧美三级在线| 在线观看中文av| 欧美亚洲大片| 色妹子一区二区| 男人日女人逼逼| 俺来也官网欧美久久精品| 亚洲黄色尤物视频| 51xx午夜影福利| 免费黄网站在线播放| 国产丝袜欧美中文另类| 欧美精彩一区二区三区| 日韩中文字幕观看| 成人性生交大片免费看视频在线| 99re在线| 欧美日本精品| 欧美大黄免费观看| 亚洲欧美激情一区二区三区| 涩涩涩久久久成人精品| 欧美日韩在线播放三区四区| 日韩av手机版| 亚洲电影有码| 欧美日韩久久一区二区| 污污网站免费看| 91成人小视频| 精品黑人一区二区三区久久| 视频免费在线观看| 日韩深夜福利| 亚洲视频欧洲视频| 18啪啪污污免费网站| 日韩精品一区二区久久| 久久精品一偷一偷国产| 可以直接看的黄色网址| 国产一区二区三区四区老人| 欧美精品福利在线| 韩国一区二区av| 欧美成人黑人| 在线观看区一区二| 亚洲成人一区| 日韩欧美激情四射| 欧美一级大片免费看| 99久久人爽人人添人人澡| 亚洲福利小视频| 熟女少妇一区二区三区| 色天天久久综合婷婷女18| 草民午夜欧美限制a级福利片| 久久久久成人网站| 亚洲影音先锋| 成人激情综合网| 欧美自拍第一页| 久久蜜臀精品av| 一个色的综合| 高清精品在线| 色av成人天堂桃色av| 日日干日日操日日射| 大桥未久女教师av一区二区| 亚洲网在线观看| 欧美激情精品久久| 三级欧美韩日大片在线看| 91精品国产综合久久久久久蜜臀| 亚洲黄色一级大片| 国产欧美一区视频| 大西瓜av在线| 日本午夜免费一区二区| 日韩电影中文字幕av| 99成人在线观看| 亚洲伦理一区| 91老司机精品视频| 国产小视频免费在线观看| 亚洲精品免费播放| 牛夜精品久久久久久久| a看欧美黄色女同性恋| 最近中文字幕2019免费| 日产精品久久久久| 国产在线精品一区二区| 欧美日韩一区二区三区在线观看免| 超碰在线网址| 欧美日韩免费观看一区二区三区| 少妇激情一区二区三区视频| 伊人色**天天综合婷婷| 国产精品免费观看在线| 日韩国产福利| 香港成人在线视频| 久久久国产精品久久久| 小说区亚洲自拍另类图片专区 | 精品一区久久久| 毛片免费不卡| 在线观看免费成人| 亚洲av无码国产精品久久| 欧美午夜久久| 成人午夜黄色影院| 91caoporm在线视频| 日韩欧美在线中文字幕| 好吊色视频一区二区三区| 一区二区三区四区日韩| 国产精品一区二区久久国产| 国际av在线| 一本大道av伊人久久综合| 白嫩情侣偷拍呻吟刺激| 亚洲欧美伊人| 5g影院天天爽成人免费下载| 欧美18hd| 88在线观看91蜜桃国自产| youjizz亚洲女人| 久久av最新网址| 久久久综合亚洲91久久98| 国产精品一二三产区| 精品国产一区久久| 国产乡下妇女做爰| 成人av电影免费观看| 国产欧美精品aaaaaa片| xxxxxhd亚洲人hd| 欧美激情高清视频| 性一交一乱一乱一视频| 亚洲国产综合91精品麻豆| 一级全黄裸体片| 一区二区亚洲精品| 国产综合第一页| 久久影院午夜精品| 亚洲欧美日韩爽爽影院| 成人午夜精品视频| 中文字幕一区二区三区蜜月 | 免费一区二区三区四区| 中文字幕一精品亚洲无线一区| 最新黄色网址在线观看| 国产精品久久三| 欧美激情第一区| 国产主播一区| 久久超碰亚洲| 欧洲成人一区| 九九精品视频在线观看| 免费看黄网站在线观看| 黑人狂躁日本妞一区二区三区 | 日本高清不卡的在线| 男女av在线| 欧美欧美午夜aⅴ在线观看| 黄色录像一级片| 成人动漫精品一区二区| aaaaaa亚洲| 91久久夜色精品国产按摩| 5g国产欧美日韩视频| 少妇视频在线观看| 最近2019免费中文字幕视频三 | 福利精品在线| 欧美日韩电影在线观看| 国内精品久久影院| 国产91色在线|免| 暖暖视频在线免费观看| 在线视频一区二区三区| 网站永久看片免费| 高清在线成人网| 国产日产欧美视频| 99精品在线免费在线观看| 91香蕉视频在线下载| 自拍网站在线观看| www.久久久久久.com| 天天干天天插天天操| 欧美三级一区二区| 国产 日韩 欧美 成人| 日本一区二区三区四区在线视频| 午夜激情视频网| 欧美亚洲三级| 大地资源网在线观看免费官网| 亚洲区小说区图片区qvod按摩| 91中文在线观看| 欧美色网一区| 久久久噜噜噜久久中文字免| 最新97超碰在线| 亚洲精品国产精品国自产观看浪潮| 在线免费av片| 欧美性xxxxxxx| 青青草手机视频在线观看| 国产午夜精品一区二区三区视频 | 国产一区二区三区精品在线| 国产a精品视频| 色一情一区二区| 久久久久久久尹人综合网亚洲| 日韩精品手机在线观看| 欧美久久精品一级c片| 国产区欧美区日韩区| 电影91久久久| 国产自产女人91一区在线观看| 亚洲承认视频| 51视频国产精品一区二区| 成人video亚洲精品| 色爱精品视频一区| 黄色在线网站| 日韩av网站大全| 好吊色一区二区| 日韩欧美第一区| av手机免费看| 在线成人午夜影院| 中国女人一级一次看片| 欧美日韩精品在线播放| 日韩成人在线免费视频| 亚洲伊人伊色伊影伊综合网| 黄色录像二级片| 国产精品国产三级国产| 国产aaaaaaaaa| 国产精品久久一级| 婷婷丁香综合网| 国产精品日韩成人| 在线观看天堂av| 亚洲欧洲日韩在线| 国产精品视频一区二区三| 亚洲欧美自拍偷拍| 国产日产精品一区二区三区的介绍| 国产精品视频一区二区三区不卡| 性欧美一区二区| 中文字幕欧美区| 成年人免费视频播放| 亚洲人成亚洲人成在线观看图片| 国产午夜手机精彩视频| 亚洲另类中文字| 国产无套内射又大又猛又粗又爽| 亚洲国产成人精品视频| 欧美日韩综合在线观看| 亚洲成人av电影在线| 国产精品视频久久久久久久| 欧美性猛xxx| 在线免费观看av网址| 欧美日韩黄色一区二区| 国产精品视频在线观看免费| 欧美一区午夜视频在线观看| www五月婷婷| 亚洲精品久久久一区二区三区| 深夜福利免费在线观看| 在线成人中文字幕| 黄色在线视频网站| 色综合久久久888| 蜜桃视频在线观看播放| 国产国产精品人在线视| 亚洲人体在线| 国产成人免费电影| 欧美美女在线| 色爽爽爽爽爽爽爽爽| 激情av一区| 国产免费视频传媒| 久久riav| 麻豆传媒在线免费看| 日韩在线国产精品| av片在线观看永久免费| 久久久久久久久久国产| www.成人爱| 国产日韩欧美中文| 风间由美一区二区av101| 久久国产一区二区| 色中色综合网| 国产一二三在线视频| 日韩在线a电影| 美女流白浆视频| 国产日韩精品一区| 麻豆changesxxx国产| 日本道色综合久久| xxxwww在线观看| 亚洲一区二区黄| gogo高清在线播放免费| 国产精品嫩草视频| 牛牛影视久久网| 在线观看免费91| 久久精品日产第一区二区| 亚洲一区二区中文字幕在线观看| 99国产一区二区三精品乱码| 又嫩又硬又黄又爽的视频| 亚洲成a人v欧美综合天堂下载| 中文字幕在线2018| 日韩av网站大全| 中文在线观看免费| 国产精品免费福利| 天堂成人娱乐在线视频免费播放网站 | 精品视频一区二区在线观看| 欧美午夜电影在线播放| 五月婷中文字幕| 久久久久久久久久国产精品| 亚洲国产一区二区久久| 日本一区免费| 国产亚洲在线| 国产精品日日摸夜夜爽| 136国产福利精品导航| 毛片在线免费播放| 日韩av在线网址| 97在线超碰| 99精品国产一区二区| 国产精品88久久久久久| 91香蕉视频污版| 91视频你懂的| 日本高清www免费视频| 亚洲成人精品视频| 欧美人与牲禽动交com| 亚洲最大av在线| 亚洲人成免费网站| 亚洲在线观看网站| 亚洲乱码国产乱码精品精可以看 | 成人免费看片视频在线观看| 免费成人av资源网| xxxxx99| 欧美日韩一级二级三级| av在线免费一区| 国产精品丝袜一区二区三区| 不卡的日韩av| 一区二区三区四区精品| 精品国产第一福利网站| 精品婷婷色一区二区三区蜜桃| 欧美三级午夜理伦三级中文幕| 一级黄色特级片| 中文字幕一区视频| 中文字幕一区二区在线视频| 亚洲视频国产视频| av成人在线观看| 亚洲国产一区二区在线| 国产精品精品一区二区三区午夜版| 中文字幕在线视频久| 精品乱子伦一区二区三区| 在线成人直播| 波多野结衣在线免费观看| 一区二区三区四区乱视频| 国产成人av免费看| 久久久久国产视频| 欧美毛片免费观看| 蜜臀av午夜一区二区三区 | 色婷婷免费视频| 欧美午夜www高清视频| 国产在线视频你懂得| 欧美在线一区二区三区四| 中文精品一区二区| 日韩中文字幕免费在线| 欧美极品美女视频| 91精品国产乱码久久久| 欧美成人性色生活仑片| 岛国精品一区| 免费观看成人网| 亚洲三级在线看| 婷婷综合激情网| 国产精品国语对白| 99久久久久| 国产激情第一页| 欧美性大战久久久| 亚洲男同gay网站| 狼狼综合久久久久综合网| 蜜臀av性久久久久蜜臀aⅴ四虎| 久久中文免费视频| 亚洲精品一区二区网址| 91精品麻豆| 国产一区二区网| 国产精品欧美极品| 亚洲精华国产精华精华液网站| 欧美与欧洲交xxxx免费观看| 成人久久综合| 黄色av电影网站| 欧美中文字幕一区二区三区亚洲| 毛片在线看网站| 免费在线国产精品| 国产一区91精品张津瑜| 久久夜色精品国产噜噜亚洲av| 日韩在线免费高清视频| 欧美亚洲大陆| 999热精品视频| 在线观看免费视频综合| 成人在线黄色电影| 综合久久国产|