精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产精品久av福利在线观看| av在线中文| 狠狠干综合网| 亚洲美女精品成人在线视频| 欧美大尺度做爰床戏| 老司机午夜在线| 粉嫩一区二区三区性色av| 欧美一区二区三区图| 国产精品suv一区二区88| 97久久超碰| 欧美视频一区在线观看| 天堂8在线天堂资源bt| 你懂的在线播放| 国产一区二区按摩在线观看| 欧美中文在线免费| 我要看黄色一级片| 亚洲肉体裸体xxxx137| 91精品国产全国免费观看| 国产网站免费在线观看| 九七电影韩国女主播在线观看| 99re在线精品| 99久久99久久精品免费观看| 日韩三级视频在线看| 国产日产欧美视频| bt在线麻豆视频| 久久久国产综合精品女国产盗摄| 91精品中国老女人| 日本黄色一级视频| 激情久久久久| 久久天天躁狠狠躁老女人| 在线免费观看麻豆| 你懂的在线观看一区二区| 欧美一级电影网站| 男人添女人下面免费视频| 碰碰在线视频| 亚洲成av人片在www色猫咪| 中文字幕第一页亚洲| 国产黄在线看| 国产欧美一区二区三区在线老狼| 国模一区二区三区私拍视频| 北条麻妃一二三区| 久久99深爱久久99精品| 国产精品va在线| 精品国产一区二区三区四| 妖精视频成人观看www| 欧美成人黄色小视频| 91香蕉一区二区三区在线观看| 精品国产美女| 亚洲色图15p| 亚洲最大的黄色网| 欧美爱爱网站| 亚洲精品国产福利| 超碰97在线资源站| 老司机aⅴ在线精品导航| 日韩精品中文字幕一区| 三级黄色片免费看| 免费一级欧美片在线观看网站| 欧美日产在线观看| 国内自拍第二页| 高清不卡一区| 欧美一区在线视频| 欧美一级片在线免费观看| 香蕉大人久久国产成人av| 日韩女优电影在线观看| 少妇熟女视频一区二区三区| 2023国产精华国产精品| 亚洲福利在线看| 一级做a爰片毛片| 伊人春色精品| 中文字幕日韩av综合精品| 久草福利资源在线| 亚洲成人三区| 欧美激情影音先锋| 久久一区二区三区视频| 首页国产欧美日韩丝袜| 国产精品大陆在线观看| 国产欧美日韩成人| 成人小视频免费在线观看| 精品不卡一区二区三区| 免费在线观看一级毛片| 国产精品国模大尺度视频| 丰满女人性猛交| av在线不卡免费| 色综合网站在线| 亚洲国产高清av| 亚洲一区二区免费在线观看| 亚洲激情自拍图| 韩国女同性做爰三级| 国产国产精品| 97国产精品人人爽人人做| 午夜精品久久久久久久蜜桃| 久久99精品久久久久久国产越南| 丁香婷婷久久久综合精品国产| 天堂在线视频免费观看| 中文字幕乱码亚洲精品一区| 一本大道东京热无码aⅴ| 蜜臀国产一区| 日韩视频在线一区二区| 五月婷婷综合在线观看| 图片小说视频色综合| 97精品久久久中文字幕免费| 99成人精品视频| 成人久久久精品乱码一区二区三区| 农村寡妇一区二区三区| 18+视频在线观看| 色拍拍在线精品视频8848| 国产欧美精品一二三| 免费视频国产一区| 欧美贵妇videos办公室| 一级一级黄色片| 成人av中文字幕| 自拍亚洲欧美老师丝袜| 午夜欧美激情| 欧美videofree性高清杂交| 人妻体内射精一区二区| 黄色av一区| 国产日韩av在线播放| 日韩二区三区| 亚洲精选视频免费看| 九九视频精品在线观看| 精品按摩偷拍| 欧美成人精品在线视频| 这里只有精品999| 91麻豆视频网站| 精品视频在线观看一区二区| 欧美天堂一区| 中国日韩欧美久久久久久久久| 日本最新中文字幕| 九九在线精品视频| 午夜一区二区三区| 成人亚洲欧美| 日韩www在线| 国产一级在线观看视频| 国产精品自拍网站| 欧美性视频在线播放| 日韩一区二区三区免费视频| 日韩禁在线播放| 亚洲精品在线观看av| 国产一区二区在线电影| 亚洲三区在线观看| 亚洲a∨精品一区二区三区导航| 日韩黄在线观看| 激情综合网五月婷婷| 国产成人av影院| 特级西西444| 九九99久久精品在免费线bt| 久久精品2019中文字幕| 91精品国产乱码久久久久| 亚洲国产精品v| 在线免费av播放| 教室别恋欧美无删减版| 国产成人一区二区| 精品福利视频导航大全| 欧美在线高清视频| 调教驯服丰满美艳麻麻在线视频 | 亚洲视频导航| 久久爱.com| 久久久精品国产网站| 国产欧美一级片| 亚洲精品日日夜夜| 国产sm在线观看| 极品中文字幕一区| 精品国产乱码久久久久久郑州公司 | 久久69av| 午夜精品视频在线| 韩国三级在线观看久| 欧美日韩精品一区二区天天拍小说 | 1024av视频| 欧美精品第一区| 国产精品爽黄69| 国产精品久久麻豆| 日韩免费看网站| 亚洲国产综合久久| 久久亚洲精华国产精华液| 无码人妻丰满熟妇区毛片| 三区四区不卡| 超碰在线97av| 久久久久久久| 久久精品国产91精品亚洲| 黄频网站在线观看| 欧洲视频一区二区| 激情五月婷婷小说| 91亚洲国产成人精品一区二三 | 九九免费精品视频| 91麻豆123| 极品粉嫩美女露脸啪啪| 韩日精品视频| 日本一区二区在线| 日本久久伊人| 日本欧美精品在线| 黄色av免费在线| 亚洲国产小视频| 中日韩av在线| 婷婷国产在线综合| 香蕉久久久久久久| eeuss影院一区二区三区 | 欧美亚洲人成在线| 久久免费高清视频| 午夜国产福利在线| 精品1区2区在线观看| 中文字幕乱码在线观看| 亚瑟在线精品视频| 日本二区三区视频| 91网上在线视频| 亚洲第一成肉网| 久久狠狠一本精品综合网| 国产经典久久久| 欧美丝袜一区| 久久99精品久久久久子伦| 麻豆一二三区精品蜜桃| 国产精品成人一区| 日韩大片免费观看| 欧美日韩国产成人| 日本a级在线| 亚洲人成电影网站色www| 亚洲黄色在线播放| 欧美喷潮久久久xxxxx| 日日夜夜综合网| 亚洲成人精品一区| 一区二区视频免费看| 国产日韩欧美高清| 国内精品久久99人妻无码| 国产成人精品影视| 中文字幕1234区| 蜜桃av一区二区在线观看| 青青视频在线播放| 国产精品毛片一区二区三区| 99久久久精品视频| 天天操夜夜操国产精品| 水蜜桃亚洲一二三四在线| 伊人成综合网伊人222| 精品国产免费一区二区三区| 永久免费精品视频| 北条麻妃高清一区| 日本免费一区二区视频| 91亚洲国产精品| 97久久中文字幕| 成人信息集中地欧美| 国产亚洲人成a在线v网站| 69久久夜色精品国产7777| 国产调教视频在线观看| 在线观看久久久久久| h视频网站在线观看| 精品伊人久久97| 欧洲综合视频| 日韩黄色高清视频| 无码精品在线观看| 亚洲激情自拍图| 日本韩国在线观看| 精品不卡在线视频| 亚洲av少妇一区二区在线观看| 欧美一级黄色录像| 精品国自产拍在线观看| 日韩一区二区精品在线观看| 国产乱人乱偷精品视频a人人澡| 欧美色涩在线第一页| 性高潮视频在线观看| 欧美日韩国产一区| 一区二区三区免费在线视频| 一区二区三区中文字幕精品精品| 亚洲不卡在线播放| 欧美激情在线看| 免费看日本黄色片| 中文字幕精品一区二区三区精品| 亚洲黄色免费视频| 国产精品系列在线| www.av天天| 亚洲欧洲性图库| 欧美三级在线免费观看| 亚洲男人天堂av| 在线免费观看毛片| 欧美日韩午夜激情| 日韩av大片在线观看| 欧美日韩亚洲综合一区 | 精精国产xxxx视频在线中文版| 欧美日本中文字幕| 久草免费在线色站| 国产97在线亚洲| 国外成人福利视频| 成人国产精品一区| 久久婷婷国产| 欧美在线播放一区| 久久综合成人| 性一交一乱一伧国产女士spa| 伊人天天综合| 成年网站在线免费观看| 精品一区二区三区免费播放| 91精品又粗又猛又爽| 91美女蜜桃在线| 希岛爱理中文字幕| 亚洲成a人v欧美综合天堂| 国产又黄又粗又爽| 91精品久久久久久久99蜜桃| 免费观看黄色av| 亚洲片国产一区一级在线观看| h片在线播放| 欧美一级免费视频| 久久婷婷五月综合色丁香| 国产欧美一区二区视频| av在线不卡顿| 成人av在线播放观看| 日韩二区三区四区| 亚洲精品一二三四| 久久奇米777| 久久综合加勒比| 欧美中文字幕一区二区三区| 国产熟女一区二区丰满| 国产亚洲精品久久久久久牛牛| 成人直播在线| 日本久久久久久久久久久| 91综合久久爱com| 无遮挡亚洲一区| 亚洲激情在线| 在线免费黄色小视频| 久久综合久色欧美综合狠狠| 污污视频网站在线免费观看| 色哟哟一区二区在线观看| 国产日韩欧美一区二区东京热| 亚洲欧洲日产国码av系列天堂| a级毛片免费观看在线| 国产91色在线|| 偷窥自拍亚洲色图精选| 视色,视色影院,视色影库,视色网| 免费一区视频| av在线播放网址| 亚洲欧美一区二区三区国产精品| 天堂中文在线网| 亚洲高清色综合| 91精选在线| 国产欧美韩国高清| 精品无人区麻豆乱码久久久| 黄色大片在线免费看| 日韩av中文字幕一区二区| 国产一级二级在线观看| 一区二区三区精品久久久| 国产精品久久久久久在线| 亚洲视频在线观看免费| yellow在线观看网址| 国产精品久久久久久久久婷婷| 99久久激情| 五月婷婷之综合激情| 国产欧美一区二区在线| 国产中文字幕视频| 日韩激情片免费| 2022成人影院| 蜜桃av噜噜一区二区三| 久久都是精品| 素人fc2av清纯18岁| 精品人伦一区二区三区蜜桃免费| 日本精品久久久久久| 欧美激情中文网| 免费观看性欧美大片无片| 久久综合亚洲精品| 国产一区二区三区免费在线观看| 欧洲美一区二区三区亚洲 | 亚洲图片小说视频| 精品在线小视频| 欧美xxx视频| 欧美日韩亚洲综合一区二区三区激情在线| 亚洲一区国产| 免费黄色在线视频| 色呦呦网站一区| 日本a级在线| 91人人爽人人爽人人精88v| 999国产精品永久免费视频app| 九九热视频免费| 亚洲欧美激情在线| 少妇高潮一区二区三区69| 97在线精品视频| 天堂俺去俺来也www久久婷婷| 欧美牲交a欧美牲交aⅴ免费下载| 久久久一区二区三区捆绑**| 性高潮视频在线观看| www.欧美精品一二三区| 91精品国产一区二区在线观看| 中国一级大黄大黄大色毛片| 国产成人av一区二区三区在线 | 一区二区国产视频| 人妻91麻豆一区二区三区| 欧美在线视频导航| 免费一区二区三区视频导航| 中文字幕国产免费| 亚洲一区影音先锋| 午夜18视频在线观看| 91成人天堂久久成人| 免费看av成人| 欧美日韩精品区别| 午夜av一区二区三区| 国内精品在线视频| 7777精品伊久久久大香线蕉语言 | 久久久久久9999| 91丨九色丨蝌蚪丨对白| 午夜精品福利电影| 欧美日韩老妇| 美国黄色一级视频| 日韩欧美中文字幕在线播放| 欧洲综合视频| 91观看网站| 久久婷婷影院| 精品无码人妻一区二区三区|