亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

二叉樹結(jié)點層次計算:遞歸、迭代、父指針與數(shù)組方案全解析

二叉樹結(jié)點層次計算:遞歸、迭代、父指針與數(shù)組方案全解析 1. 從一個看似簡單的二叉樹問題說起計算二叉樹中指定結(jié)點所在的層次——這個標(biāo)題看起來像是數(shù)據(jù)結(jié)構(gòu)課程里的一道基礎(chǔ)練習(xí)題但真正動手寫過的人都知道它背后牽扯的東西遠(yuǎn)比想象中多。層次的定義本身就有歧義根結(jié)點算第0層還是第1層這個問題在不同的教材、不同的面試官嘴里答案可能完全不一樣。更別提實際工程中二叉樹可能不是標(biāo)準(zhǔn)的鏈?zhǔn)浇Y(jié)構(gòu)可能是數(shù)組存儲的完全二叉樹可能是帶父指針的三叉鏈表甚至可能是序列化后的字符串形式。我在過去幾年里至少在三類場景中反復(fù)遇到過這個問題一是面試輔導(dǎo)時學(xué)員被追問如果結(jié)點不存在怎么辦二是做代碼審查時發(fā)現(xiàn)同事用遞歸返回值判斷層次結(jié)果遇到空樹直接棧溢出三是幫一個做文件系統(tǒng)目錄樹分析的朋友優(yōu)化查詢邏輯他的樹有幾十萬個結(jié)點每次查層次都要重新遍歷一遍性能慘不忍睹。這篇文章就是把這些年踩過的坑、總結(jié)出來的套路以及不同場景下該怎么選方案一次性講清楚。不管你是正在準(zhǔn)備數(shù)據(jù)結(jié)構(gòu)考試的學(xué)生還是工作中需要處理樹形結(jié)構(gòu)的開發(fā)者或者是想搞清楚遞歸和迭代到底該怎么選的初學(xué)者下面這些內(nèi)容應(yīng)該都能直接拿來用。我會從最基礎(chǔ)的遞歸思路開始逐步展開到迭代方案、帶父指針的優(yōu)化、數(shù)組存儲的特殊處理最后給出完整的可運行代碼和性能對比。2. 核心思路拆解與方案選型2.1 層次定義的統(tǒng)一約定在動手寫任何代碼之前必須先和所有相關(guān)方對齊一個約定根結(jié)點的層次是多少。我見過太多因為這個問題沒對齊導(dǎo)致返工的案例。常見的約定有兩種根結(jié)點為第1層這是國內(nèi)大多數(shù)數(shù)據(jù)結(jié)構(gòu)教材比如嚴(yán)蔚敏版采用的約定符合人類直覺樹的總層數(shù)就是樹的高度。根結(jié)點為第0層部分算法競賽和國外教材采用這種約定在計算路徑長度、深度等指標(biāo)時數(shù)學(xué)上更簡潔。我的建議是在函數(shù)命名和注釋中顯式寫明約定。比如函數(shù)名叫g(shù)etLevelFromOne或者getDepthFromZero這樣調(diào)用方一眼就能看懂不需要去翻文檔。如果團隊有統(tǒng)一規(guī)范那就嚴(yán)格遵循如果沒有就在代碼里加一行注釋說明成本極低但收益巨大。注意面試時如果面試官沒有明確說明一定要主動問一句根結(jié)點算第幾層這不僅是確認(rèn)需求也體現(xiàn)了你的嚴(yán)謹(jǐn)性。2.2 遞歸方案的核心邏輯遞歸是解決樹形結(jié)構(gòu)問題最自然的思路。要計算某個結(jié)點所在的層次可以轉(zhuǎn)化為從根結(jié)點出發(fā)沿著某條路徑往下找每走一層計數(shù)器加一找到目標(biāo)結(jié)點時返回當(dāng)前計數(shù)。用遞歸的語言描述就是如果當(dāng)前結(jié)點就是目標(biāo)結(jié)點返回當(dāng)前層次否則分別在左子樹和右子樹中查找如果左子樹找到了就返回左子樹的結(jié)果否則返回右子樹的結(jié)果都沒找到就返回一個表示未找到的特殊值。這里有一個關(guān)鍵細(xì)節(jié)遞歸函數(shù)的返回值設(shè)計。很多初學(xué)者會寫成返回布爾值表示是否找到然后通過全局變量記錄層次。這種寫法雖然能跑通但破壞了函數(shù)的純粹性在多線程環(huán)境下會出問題。更好的做法是讓遞歸函數(shù)直接返回層次值用一個特殊值比如-1表示未找到。2.3 迭代方案為什么也值得掌握遞歸寫起來簡潔但有兩個硬傷一是遞歸深度受調(diào)用棧限制如果樹退化成鏈表比如按順序插入的有序二叉樹幾萬個結(jié)點就可能導(dǎo)致棧溢出二是遞歸的函數(shù)調(diào)用開銷在性能敏感場景下不可忽略。迭代方案通常借助隊列做層次遍歷BFS在遍歷過程中記錄每個結(jié)點的層次。當(dāng)遇到目標(biāo)結(jié)點時直接返回當(dāng)前層次。這種寫法的時間復(fù)雜度和遞歸一樣都是O(n)但空間復(fù)雜度在最壞情況下也是O(n)隊列中最多同時存在一層的結(jié)點而遞歸的空間復(fù)雜度是O(h)h為樹高。兩者各有優(yōu)劣具體選哪個要看樹的形態(tài)和運行環(huán)境。2.4 帶父指針的三叉鏈表優(yōu)化如果樹結(jié)構(gòu)中每個結(jié)點額外存儲一個指向父結(jié)點的指針那么問題就變得非常簡單從目標(biāo)結(jié)點出發(fā)沿著父指針一路向上走到根結(jié)點走過的邊數(shù)加一就是層次。這種方案的時間復(fù)雜度是O(h)不需要遍歷整棵樹在只需要查詢少量結(jié)點層次時優(yōu)勢明顯。代價是每個結(jié)點多了一個指針的存儲開銷以及在插入、刪除結(jié)點時需要維護父指針的正確性。這是一種典型的空間換時間策略適合查詢頻繁但修改較少的場景。2.5 數(shù)組存儲的完全二叉樹特殊處理對于用數(shù)組存儲的完全二叉樹堆就是典型例子結(jié)點下標(biāo)和層次之間有直接的數(shù)學(xué)關(guān)系。如果根結(jié)點存在下標(biāo)0處那么下標(biāo)為i的結(jié)點所在層次是floor(log2(i1)) 1根為第1層或者floor(log2(i1))根為第0層。這個公式的推導(dǎo)很簡單完全二叉樹中第k層的結(jié)點下標(biāo)范圍是[2^(k-1)-1, 2^k-2]根為第1層根下標(biāo)為0。對下標(biāo)i取以2為底的對數(shù)再向下取整就能反推出層次。這種方案的時間復(fù)雜度是O(1)是所有方案中最快的但只適用于數(shù)組存儲的完全二叉樹。3. 核心細(xì)節(jié)解析與實操要點3.1 遞歸方案的返回值設(shè)計陷阱先看一段很多初學(xué)者會寫出的代碼def get_level_wrong(root, target): if root is None: return 0 if root target: return 1 left get_level_wrong(root.left, target) if left 0: return left 1 right get_level_wrong(root.right, target) if right 0: return right 1 return 0這段代碼的問題在于當(dāng)目標(biāo)結(jié)點在左子樹時返回的是left 1但left本身已經(jīng)是左子樹中目標(biāo)結(jié)點相對于左子樹根的層次加上1之后確實是從當(dāng)前結(jié)點看的層次。邏輯上似乎沒問題但仔細(xì)想如果目標(biāo)結(jié)點就是左子樹的根left返回1加1變成2而從當(dāng)前結(jié)點看它確實在第2層沒問題。真正的問題出在空樹的處理和未找到的表示上。如果樹為空返回0調(diào)用方無法區(qū)分樹為空和目標(biāo)結(jié)點在第0層如果約定根為第0層的話。所以更穩(wěn)妥的做法是用-1表示未找到并且明確約定根結(jié)點的層次。3.2 迭代BFS的層次記錄技巧用隊列做層次遍歷時如何知道當(dāng)前處理的是第幾層常見的有兩種做法第一種是雙隊列法用兩個隊列一個存當(dāng)前層的結(jié)點一個存下一層的結(jié)點。當(dāng)前層處理完后交換兩個隊列層次加一。這種寫法邏輯清晰但需要額外的隊列空間。第二種是單隊列加計數(shù)法每次處理前先記錄當(dāng)前隊列的長度size然后連續(xù)處理size個結(jié)點這size個結(jié)點就是同一層的。處理完這size個后層次加一。這種寫法只需要一個隊列空間利用率更高是我更推薦的方式。from collections import deque def get_level_bfs(root, target, root_level1): if root is None: return -1 queue deque([root]) level root_level while queue: size len(queue) for _ in range(size): node queue.popleft() if node target: return level if node.left: queue.append(node.left) if node.right: queue.append(node.right) level 1 return -1這段代碼中size的記錄是關(guān)鍵。如果不記錄size直接一邊出隊一邊入隊就無法區(qū)分哪些結(jié)點屬于同一層。3.3 父指針方案的邊界處理帶父指針的方案看起來最簡單但有幾個邊界情況容易出錯目標(biāo)結(jié)點就是根結(jié)點此時父指針為None循環(huán)一次都不執(zhí)行直接返回根結(jié)點的層次。目標(biāo)結(jié)點不在樹中如果調(diào)用方傳入了一個不屬于這棵樹的結(jié)點沿著父指針走可能會走到別的樹上去或者陷入死循環(huán)如果父指針有環(huán)。所以這種方案通常要求調(diào)用方保證結(jié)點屬于該樹。根結(jié)點的層次約定如果根為第1層那么從目標(biāo)結(jié)點走到根結(jié)點經(jīng)過的邊數(shù)加1就是層次如果根為第0層邊數(shù)就是層次。def get_level_with_parent(node, root_level1): level root_level current node while current.parent is not None: level 1 current current.parent return level這段代碼假設(shè)了node一定在樹中且根結(jié)點的parent為None。實際使用時可以在走到根結(jié)點后檢查一下根結(jié)點是否是預(yù)期的根以確認(rèn)結(jié)點確實屬于這棵樹。3.4 數(shù)組存儲的公式推導(dǎo)與驗證對于根結(jié)點下標(biāo)為0的完全二叉樹下標(biāo)i的結(jié)點層次計算公式推導(dǎo)如下第1層只有根結(jié)點下標(biāo)0滿足floor(log2(01)) 1 0 1 1。 第2層有下標(biāo)1、2兩個結(jié)點floor(log2(11)) 1 1 1 2floor(log2(21)) 1 1 1 2。 第3層有下標(biāo)3、4、5、6四個結(jié)點floor(log2(31)) 1 2 1 3以此類推。驗證一下邊界下標(biāo)7是第4層的第一個結(jié)點floor(log2(71)) 1 3 1 4正確。下標(biāo)14是第4層的最后一個結(jié)點floor(log2(141)) 1 3 1 4正確。下標(biāo)15是第5層的第一個結(jié)點floor(log2(151)) 1 4 1 5正確。import math def get_level_array(index, root_level1): if index 0: return -1 level_from_zero int(math.log2(index 1)) if root_level 1: return level_from_zero 1 return level_from_zero注意用浮點數(shù)計算log2時對于非常大的下標(biāo)可能會有精度問題。更穩(wěn)妥的做法是用位運算index 1的二進制表示中最高位1的位置就是層次從0開始計數(shù)。Python中可以用(index 1).bit_length() - 1來獲取。4. 完整實操過程與核心環(huán)節(jié)實現(xiàn)4.1 定義二叉樹結(jié)點結(jié)構(gòu)為了演示所有方案我先定義一個通用的二叉樹結(jié)點類包含數(shù)據(jù)域、左右子指針和可選的父指針class TreeNode: def __init__(self, val0, leftNone, rightNone, parentNone): self.val val self.left left self.right right self.parent parent如果不需要父指針方案parent字段可以省略。如果需要父指針在構(gòu)建樹的時候要記得同步維護def build_tree_with_parent(values): if not values: return None nodes [TreeNode(v) if v is not None else None for v in values] for i, node in enumerate(nodes): if node is None: continue left_idx 2 * i 1 right_idx 2 * i 2 if left_idx len(nodes) and nodes[left_idx] is not None: node.left nodes[left_idx] nodes[left_idx].parent node if right_idx len(nodes) and nodes[right_idx] is not None: node.right nodes[right_idx] nodes[right_idx].parent node return nodes[0] if nodes else None這段代碼按層序數(shù)組構(gòu)建二叉樹同時維護父指針。注意values中的None表示空結(jié)點但空結(jié)點的子結(jié)點下標(biāo)仍然按照完全二叉樹的規(guī)則計算這是層序數(shù)組構(gòu)建的標(biāo)準(zhǔn)做法。4.2 遞歸方案的完整實現(xiàn)def get_level_recursive(root, target, current_level1): 遞歸計算目標(biāo)結(jié)點所在層次。 root: 當(dāng)前子樹的根 target: 目標(biāo)結(jié)點 current_level: 當(dāng)前子樹根的層次 返回目標(biāo)結(jié)點的層次未找到返回-1。 if root is None: return -1 if root is target: return current_level left_result get_level_recursive(root.left, target, current_level 1) if left_result ! -1: return left_result return get_level_recursive(root.right, target, current_level 1)這個實現(xiàn)把當(dāng)前層次作為參數(shù)傳遞避免了返回值加一的混亂。邏輯非常清晰當(dāng)前結(jié)點是目標(biāo)就返回當(dāng)前層次否則先查左子樹左子樹找到就返回否則查右子樹。都沒找到返回-1。調(diào)用方式get_level_recursive(root, target_node, 1)根結(jié)點為第1層。4.3 迭代BFS方案的完整實現(xiàn)from collections import deque def get_level_bfs(root, target, root_level1): 迭代BFS計算目標(biāo)結(jié)點所在層次。 返回目標(biāo)結(jié)點的層次未找到返回-1。 if root is None: return -1 queue deque([root]) level root_level while queue: level_size len(queue) for _ in range(level_size): node queue.popleft() if node is target: return level if node.left is not None: queue.append(node.left) if node.right is not None: queue.append(node.right) level 1 return -1這里用is而不是來比較結(jié)點是因為我們比較的是對象身份而不是值。如果樹中有重復(fù)值用可能會匹配到錯誤的結(jié)點。當(dāng)然如果業(yè)務(wù)邏輯就是按值查找那用也合理但要在文檔中寫清楚。4.4 父指針方案的完整實現(xiàn)def get_level_with_parent(node, root, root_level1): 利用父指針計算結(jié)點層次。 node: 目標(biāo)結(jié)點 root: 樹的根結(jié)點用于驗證結(jié)點確實屬于這棵樹 返回目標(biāo)結(jié)點的層次如果結(jié)點不屬于這棵樹返回-1。 if node is None: return -1 level root_level current node while current.parent is not None: level 1 current current.parent if current is not root: return -1 return level最后一步current is not root的檢查很重要它防止了傳入一個不屬于該樹的結(jié)點時返回錯誤的層次。走到最上面后如果根結(jié)點不是預(yù)期的根說明這個結(jié)點在另一棵樹里。4.5 數(shù)組存儲方案的完整實現(xiàn)def get_level_array(index, root_level1): 計算完全二叉樹中下標(biāo)為index的結(jié)點層次。 假設(shè)根結(jié)點下標(biāo)為0。 if index 0: return -1 level_from_zero (index 1).bit_length() - 1 if root_level 1: return level_from_zero 1 return level_from_zero用bit_length()代替log2避免了浮點數(shù)精度問題而且位運算速度更快。(index 1).bit_length()返回的是二進制表示所需的位數(shù)減一就是最高位1的位置也就是從0開始計數(shù)的層次。4.6 性能對比與選型建議方案時間復(fù)雜度空間復(fù)雜度適用場景注意事項遞歸O(n)O(h)樹高較小代碼簡潔優(yōu)先樹退化成鏈表時可能棧溢出迭代BFSO(n)O(n)樹高較大避免遞歸需要額外隊列空間父指針O(h)O(1)查詢頻繁修改較少需要額外存儲父指針數(shù)組公式O(1)O(1)完全二叉樹數(shù)組存儲只適用于完全二叉樹選型建議如果只是偶爾查詢一次遞歸最省事如果樹可能很深用迭代BFS如果需要頻繁查詢不同結(jié)點的層次考慮加父指針如果是堆這類完全二叉樹直接用公式。5. 常見問題與排查技巧實錄5.1 遞歸棧溢出怎么排查和解決棧溢出通常表現(xiàn)為RecursionError: maximum recursion depth exceeded。排查方法很簡單打印樹的高度如果高度接近或超過Python默認(rèn)的遞歸限制通常是1000那基本就是這個問題。解決方案有三種一是改用迭代BFS二是手動增加遞歸限制sys.setrecursionlimit(100000)但這只是治標(biāo)樹足夠大還是會崩三是用尾遞歸優(yōu)化但Python不支持尾遞歸優(yōu)化所以這條對Python無效。我個人的經(jīng)驗是只要樹的高度可能超過500就直接用迭代不要猶豫。遞歸寫起來是爽但線上環(huán)境崩一次的成本遠(yuǎn)高于多寫幾行迭代代碼。5.2 目標(biāo)結(jié)點不存在時返回什么這是一個接口設(shè)計問題。返回-1是常見做法但如果層次本身可能為-1比如根為第0層空樹返回-1就會有歧義。更穩(wěn)妥的做法是返回None或者拋異常。我的建議是如果結(jié)點不存在是正常業(yè)務(wù)邏輯的一部分返回None如果是異常情況拋異常。比如在文件系統(tǒng)目錄樹中查找某個文件文件不存在是正常的返回None但如果傳入的根結(jié)點是None那是調(diào)用方的bug應(yīng)該拋異常。5.3 樹中有重復(fù)值時怎么處理如果樹中允許重復(fù)值按值查找就會有問題。比如要找值為5的結(jié)點樹中有三個值為5的結(jié)點返回哪個的層次解決方案有兩種一是按結(jié)點引用查找調(diào)用方直接傳入目標(biāo)結(jié)點的引用這樣最準(zhǔn)確二是按值查找時明確約定返回第一個找到的比如層序遍歷中最早出現(xiàn)的并在文檔中寫清楚。我在實際項目中更傾向于第一種因為按值查找在重復(fù)值場景下語義不明確容易埋坑。5.4 父指針維護遺漏導(dǎo)致層次計算錯誤帶父指針的方案中最常見的bug是插入或刪除結(jié)點時忘記更新父指針。比如插入一個新結(jié)點時只設(shè)置了父結(jié)點的子指針沒有設(shè)置新結(jié)點的父指針導(dǎo)致新結(jié)點的parent為None計算層次時直接返回根結(jié)點的層次。排查方法寫一個校驗函數(shù)遍歷整棵樹檢查每個非根結(jié)點的parent是否指向正確的父結(jié)點。這個校驗函數(shù)在單元測試中非常有用。def validate_parent_pointers(root): 校驗樹中所有結(jié)點的父指針是否正確。 if root is None: return True if root.left is not None: if root.left.parent is not root: return False if not validate_parent_pointers(root.left): return False if root.right is not None: if root.right.parent is not root: return False if not validate_parent_pointers(root.right): return False return True5.5 數(shù)組公式在非完全二叉樹上的誤用數(shù)組公式只適用于完全二叉樹。如果樹不是完全二叉樹但用數(shù)組存儲時中間有空缺公式計算出的層次就是錯的。比如一棵只有左子樹的樹根下標(biāo)0左子結(jié)點下標(biāo)1左子結(jié)點的左子結(jié)點下標(biāo)3但下標(biāo)2是空的。此時下標(biāo)3的結(jié)點實際在第3層公式計算(31).bit_length() - 1 2加一得3看起來對。但如果下標(biāo)2的位置實際上有結(jié)點只是邏輯上不屬于這棵樹公式就會把它也算進去。所以使用數(shù)組公式前必須確認(rèn)樹是完全二叉樹且數(shù)組中沒有邏輯上不屬于該樹的占位元素。5.6 常見問題速查表問題現(xiàn)象可能原因排查方法解決方案遞歸棧溢出樹太高打印樹高改用迭代BFS返回層次總是根層次父指針未維護校驗父指針插入刪除時同步更新找不到目標(biāo)結(jié)點比較方式錯誤檢查用is還是按引用查找用is數(shù)組公式結(jié)果錯誤樹不是完全二叉樹檢查樹形態(tài)改用遞歸或迭代層次差一根層次約定不一致檢查調(diào)用參數(shù)統(tǒng)一約定并寫注釋實操心得在寫單元測試時一定要覆蓋空樹、單結(jié)點樹、目標(biāo)結(jié)點是根、目標(biāo)結(jié)點是葉子、目標(biāo)結(jié)點不存在這五種情況。這五種情況覆蓋了絕大多數(shù)邊界bug。6. 不同場景下的方案選擇與擴展思路6.1 面試場景下的答題策略面試時遇到這個問題面試官通常不只是想看你寫出代碼更想看你如何分析問題。我的建議是分三步走第一步確認(rèn)需求。問清楚根結(jié)點算第幾層結(jié)點不存在時返回什么樹的結(jié)構(gòu)是標(biāo)準(zhǔn)的鏈?zhǔn)浇Y(jié)構(gòu)還是其他形式。第二步先說思路再寫代碼??梢韵日f遞歸方案因為最直觀然后提一句迭代方案可以避免棧溢出如果面試官追問優(yōu)化再提父指針和數(shù)組公式。第三步寫完代碼后主動分析時間空間復(fù)雜度并指出邊界情況。比如這段代碼在空樹時返回-1目標(biāo)結(jié)點是根時返回1這些我都考慮到了。6.2 工程場景下的性能優(yōu)化在實際工程中如果樹的結(jié)構(gòu)經(jīng)常變動但查詢層次的需求很頻繁可以考慮在結(jié)點中緩存層次信息。每次插入刪除時更新受影響結(jié)點的層次緩存查詢時直接讀取。這種方案的時間復(fù)雜度是O(1)但維護成本較高適合讀寫比非常懸殊的場景。另一種優(yōu)化思路是路徑壓縮第一次查詢某個結(jié)點的層次時把路徑上所有結(jié)點的層次都計算出來并緩存。后續(xù)查詢這些結(jié)點時直接返回緩存值。這種方案在多次查詢同一棵樹的場景下效果很好。6.3 擴展到N叉樹和森林N叉樹的層次計算和二叉樹思路完全一樣只是遞歸時要遍歷所有子結(jié)點而不是左右兩個。迭代BFS時把左右子結(jié)點換成子結(jié)點列表即可。森林的層次計算稍微復(fù)雜一點森林中每棵樹的根結(jié)點層次都是1或者0計算某個結(jié)點的層次時先找到它屬于哪棵樹然后在那棵樹里計算。如果森林是用左子右兄弟表示法存儲的那就要注意區(qū)分子結(jié)點和兄弟結(jié)點不要混淆。6.4 擴展到帶權(quán)樹的最短路徑層次如果樹的邊上帶權(quán)值層次的定義就變得模糊了是按邊數(shù)算還是按權(quán)值和算如果是按權(quán)值和算那問題就變成了從根結(jié)點到目標(biāo)結(jié)點的路徑長度可以用DFS或BFS配合累加權(quán)值來解決。這種場景在路由算法、網(wǎng)絡(luò)拓?fù)浞治鲋斜容^常見。我在一個網(wǎng)絡(luò)拓?fù)浞治龅捻椖恐芯陀龅竭^類似需求計算某個網(wǎng)絡(luò)設(shè)備在拓?fù)錁渲械倪壿媽哟蔚厵?quán)表示的是延遲所以層次實際上是累計延遲。這種場景下遞歸和迭代方案都需要額外傳遞一個累加值參數(shù)。6.5 一個容易忽略的細(xì)節(jié)結(jié)點比較方式最后再強調(diào)一個細(xì)節(jié)在Python中比較兩個對象時調(diào)用的是__eq__方法is比較的是對象身份。如果TreeNode類沒有重寫__eq__那和is效果一樣。但如果重寫了__eq__比如按值比較那用查找可能會匹配到值相同但實際不同的結(jié)點。我的建議是在樹結(jié)構(gòu)相關(guān)的代碼中一律用is比較結(jié)點除非你明確知道自己在做什么。這樣可以避免很多隱蔽的bug。如果確實需要按值查找單獨寫一個按值查找的函數(shù)并在函數(shù)名和文檔中明確說明。def find_node_by_value(root, value): 按值查找結(jié)點返回第一個匹配的結(jié)點未找到返回None。 if root is None: return None if root.val value: return root left_result find_node_by_value(root.left, value) if left_result is not None: return left_result return find_node_by_value(root.right, value)這個函數(shù)和層次計算函數(shù)配合使用就可以實現(xiàn)按值查找并返回層次的功能而且語義清晰不容易出錯。6.6 完整測試用例最后給出一組完整的測試用例覆蓋各種邊界情況def test_get_level(): # 構(gòu)建測試樹 # 1 # / \ # 2 3 # / \ \ # 4 5 6 root TreeNode(1) root.left TreeNode(2, parentroot) root.right TreeNode(3, parentroot) root.left.left TreeNode(4, parentroot.left) root.left.right TreeNode(5, parentroot.left) root.right.right TreeNode(6, parentroot.right) # 根結(jié)點為第1層 assert get_level_recursive(root, root, 1) 1 assert get_level_recursive(root, root.left, 1) 2 assert get_level_recursive(root, root.left.left, 1) 3 assert get_level_recursive(root, root.right.right, 1) 3 # 目標(biāo)結(jié)點不存在 orphan TreeNode(99) assert get_level_recursive(root, orphan, 1) -1 # 空樹 assert get_level_recursive(None, root, 1) -1 # 迭代方案 assert get_level_bfs(root, root, 1) 1 assert get_level_bfs(root, root.left.left, 1) 3 assert get_level_bfs(root, orphan, 1) -1 # 父指針方案 assert get_level_with_parent(root, root, 1) 1 assert get_level_with_parent(root.left.left, root, 1) 3 assert get_level_with_parent(orphan, root, 1) -1 # 數(shù)組方案 assert get_level_array(0, 1) 1 assert get_level_array(1, 1) 2 assert get_level_array(2, 1) 2 assert get_level_array(3, 1) 3 assert get_level_array(6, 1) 3 assert get_level_array(7, 1) 4 print(所有測試通過) test_get_level()這組測試覆蓋了根結(jié)點、中間結(jié)點、葉子結(jié)點、不存在的結(jié)點、空樹、以及數(shù)組方案的各種邊界。跑通這組測試基本可以保證代碼的正確性。我個人在實際操作中的體會是二叉樹層次計算這個問題看起來簡單但真正寫好、寫對、寫到能上生產(chǎn)環(huán)境需要考慮的細(xì)節(jié)非常多。最重要的不是記住某一種寫法而是理解每種方案背后的取舍邏輯這樣遇到新場景時才能快速選出合適的方案。另外不管用哪種方案單元測試一定要覆蓋邊界情況我見過太多因為空樹或結(jié)點不存在導(dǎo)致線上報錯的案例了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日本3级一区二区免费| 国产亚洲日韩在线三区黑人| 伊人991| 在线观看av区| 一级片在线观看高清无码| 国产在线激情| 少好三P| 青青草在线视频人人想人人上| 日韩精品中文字幕一| 男人的天堂VA| 日本精品久久久久久久| 污污污8888| wwwss在线观看| 亚洲免费成人在线高清无码视频| 欧美97在线欧| 蜜桃狠狠色伊人亚洲综合网站| 97超碰总站| 久久久久久久78| 亚洲九九夜夜| 国产亚洲精品第一最新| 99热只有这里有精品| 国产兽交视频在线播放| 亚洲欧美首页| 欧美成人性活片| 妇女乱色二区| 精品人妻一区二区三区免费视频| 超碰偷拍| 婷婷8月天青娱乐| 呻吟 欧美 日本 中出| 东北女人的毛片| 精品久久青青草| 久久伊人大香蕉| 精品人妻美妇91job| 玖玖玖玖精品国产剧情| 国产中文字幕曰本毛片| 9999久久久久| 2020中文字幕| 狠狠躁AV| 天天综合有色网| 天天综合网91入口| 欧美另类自拍| 综合97亚洲| 九九自拍伦理| 中文在线视频| 欧美性色欧美| 不卡中文字幕aⅴ在线| 亚洲日韩精品久久久久一区壹牛| 国产9 9在线 | 亚洲| 国产操逼网站亚洲一级黄色| 美国日韩黄片| 一区三区啪啪| 韩国手机不卡无码三级视频| 黄色av播放免不| 91高清欧美| 加勒比海人人操超碰在线| 9久久久久久| 国产精品熟女一区二区三区| 69av一区二区三区| 人妻精品一区二区在线| 九九热精品免费视频| 中文字幕视频2区| 日韩av色图综合| 国产综合久久久鬼色| 五月天加勒比啪| 久射吧| 亚洲精品少妇| www.91人妻.com| 亚欧性爱ab| 日韩一级片| 91蜜臀在线久久久久| 久久精品72| 老鸭窝在线视频播放| 校园春色五月天| 无码直播久久久| 18禁网站在线播放| 91人人看| rion磁力链接| 日韩人妻一区二区精品| 久久99999| 国产熟码AV| 久久亚洲中文字幕视频| 激情五月天视频| 操b网站亚洲无码| 91女日逼| 久久久久亚洲Aⅴ无码| 操久久久久久| 色69大色97香蕉| 超碰97人妻| 婷婷九月| 中文字幕免费在线观看| 免费福利视频中文字幕| 欧美九9 9 9| 91美女色视频亚洲| 7777奇米影视久久| 久草视频制服诱惑| 性一级黄色录像片网站导航| 色噜噜狠狠色综合日日| 久久免费少妇| 亚洲人妻AV| 69久久久久久久久久久久久| 精品人成视频在线观看| 91久久久久久| 欧美亚州综合网图片| 日韩美女操b| 国产精品久久发布| 26uuu国产亚洲综合| 五月开心网| 天天色踪合| 亚洲成人在线高清| 亚洲男人天堂2| 伊人专区一区二区三区| 久久久精品日本一道| 色综合1991| 国产精品一区午夜福利| 久久亚洲色图中文字幕| 超碰伊人在线| 欧美人妻精品一区二区| 超碰97欧美日韩| 日韩免费中文字幕视频| 91色综合激情| 人人妻人人爽 97人人看碰人免费公开视频| 国产67194| 97草草| 一起草日韩| 99色婷婷中文字幕乱色| 国产精品亚洲一级av第二区| 青女在线| 玖玖综合.com| 东京热视频网| 99在线啪| 亚洲欧美中文日韩视频中国语| 丝袜美腿射精91| 99在线无码精品秘 入口黑人| 亚洲色图a| 日本熟女不卡视频| 狠狠亚洲| 9+1视频网址| 97超碰中文在线| 九九热精品在线| 激情小说日韩无码| 手机av亚洲丝袜美腿日韩第一页二页| 人人操人人摸人| 亚洲资源吧| 91久久精品蜜臀| 综合久久久久久久久91| 亚州男人的天堂| 人妻少妇av在线观看| 久操免费观看| oumeisetupian| 在线看片国产精品每日更新| 96久久久久久久| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 97se综合网| 欧美操逼熟女| 情趣丝袜无码操逼视频| 九九热AV| 综合少妇网| 久热久一区二区三区| 丁香五六月啪啪| 亚州久久9| 一起草av| 日韩中文字幕视频| 风间由美日韩欧美久久| 美女毛片999| 激情接吻视频久久久久久| 男人的天堂三级| 丁香五月偷拍| 亚洲最大无码中文字幕网站| 欧美综合天天| 一摸二插三插| 秋霞男人网| 欧美午夜视频精品久久| 97在线视频网站| 精品无码一二三四区| 偷看洗澡一二三区美女| 99re公开精品免费视频| 粉嫩av在线| 九99久久| 亚洲国产亚洲天堂| 97精品久久久久久久| 免费一级毛片在线视频观看| 老司机深夜18禁污污网站| 大香蕉在线SuP| 天天肏美女| 人妻大香蕉| 亚洲日韩青青草色月| 欧美系列在线一区二区| 一级二级在线观看| 激情五月天校园春色网| 丝袜性亚洲| 99综合免费视频| 中国大陆国产高清AⅤ毛片| 怡红院久久老司机| 人妻五十路在线| 大香蕉操久久| 国产日比| 久久肏大逼| 中日亚韩免费视频| 影音先锋视频在线| 精品午夜福利导航| 成年人网站在线免费观看| 东北老熟女| 亚洲男人综合网| 亚洲熟妇图片| 亚洲无套久久嗯嗯| 香蕉一区二区三区在线视频| 1024亚洲中文字幕久在线看片你懂的 | 亚洲AV无码天美传媒一区| 强奸乱伦av电影| 性爱乱伦视频免费| 亚洲春色一区二区三区| 91搞逼视频| 亚洲一卡二卡在线免费| 好吊色综合| 成人国产二区三区在线,男女精品。| 中文字幕第95页| 午夜后入| 四虎在线免费视频| 91美女国产在线| 亚洲诱惑| 蜜臀AV一区二区三区| 久久机热| 国产又大又粗又长视频| 国产成人啪一区二区| 丰满欧美放荡少妇在线| 国产精品另类一区大香蕉| 天天干夜夜| 2020中文字幕在线| 怡春院久久| 嗯嗯啊啊啊好爽| 国色综合天| 美女高潮国产高清| 欧美 精品国产制服第一页| 亚洲另类欧美精品| 美国aaaaa一级黄片| 入口操逼网站| AV中文在线可看| 97精品国产97久久久| 亚洲一区二区性爱电影| 啊啊啊啊嗯嗯嗯用力好爽 | 色噜噜人妻丝袜a∨先锋影| 国产尤物AV尤物在线观看不卡| 91 亚洲 欧美 日韩 国产 综合| 国产精品久久久久亚洲av| 唐山老熟妇露脸啪啪叫| 欧美一级三级| 欧美页片| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 女人的久久久| 2000亚洲男人天堂| 亚洲图片91| AVE乱伦| 美女视频尤物网在线看| 99这里都是精品| 久插不卡| 日日干日日摸| 操操逼视频| 欧美一区二区亚洲天堂| 日韩内射视频| 亚洲情色 无码专区| 后入综合久久| 国产宅男宅女在线观看| 丁香六月天| 国产人妻一区二区三区欧美毛片| 欧美少妇高潮| 国产精品分类在线观看| 久久思思热| 精品免费国产二区三区| 91欧美性| 一区不卡在线观看av| 国产欧美日韩精品中文| 夜夜操天天肏| 久久午夜神马| www黄片免费看com| 欧美色997| 深夜激情| 中文字幕精品资源在线| 啊啊啊快操我视频| 亚洲日韩电影| 亚洲一区二区性爱电影| 中文字幕av丝袜| 精品一区二区三区国产| 丁香五月天激情| 麻豆精品三区视频| 国产成人自拍视频视频| 日本高清电影欧美色图| 亚洲日韩狠狠撸视频| 91av一区二区在线观看| 67914在线精品观看| 久草久日| 欧洲一级性爱视频在线观看| 亚洲欧美日韩电影网站一区| 亚川综合视频| 青青草啪啪网| 2019精品国产无码成人| 精品国产72| 国产精品女aA片爽爽视频| 丁香五月婷婷基地| 好湿好紧视频| 97人人模人人爽人人| www久久精品| 国产欧美岛国精品一区| 国产视频大全| 国岛片视频| 日日干男人的天堂| 色综合久久av| 人人超碰在线观看黄| 97资源站日韩| 国产精品一区二区在钱播放| 射综合网| 亚洲91网。| 中文字幕高清精品一区| 亚洲AV无码久久精品蜜桃小说| 国产 日韩 欧美一区| 日本A级视频| 久久亚洲AV无码白度| 国产精品蜜乳AV| 涩涩久久精品| 色999;丁香五月| 亚洲中文字幕乱码无码一区二区| 亚洲啪AⅤ永久无码| 精品小视频在线| 日韩无码a片| 97国产色图| 97国产成人精品免费视频| 91熟女视频网| 亚洲精品国产精品乱码不99| 亚洲免费97免费| 亚洲AV操| 成人性交免费视屏| 91日日| 日本性交操一区二区不卡系列| 日韩少妇丰满亚洲| 亚洲制服欧美另类内射| 欧美色性情| 久久久久精| 三级AV入口| 欧美亚洲综合999| 日本女人操逼| 岛国黄片网站| 9久9久| 色爱综合网欧美| 亚洲激情色片| 久久99视频| 女沟厕偷窥piss小便| 在线黄色污污网站| 东京热免费视频| 久草新在线| 91老熟女91老女人| 97色五月天完| 最新日产中文在线麻豆| 我要色综合网| 91视频女生| 久久老子无码午夜伦不卡| 午夜精品久久久99热蜜桃的功能特点| 久久久久中出| 天天看,天天做| 国产成人在线观看网址| 中文字幕无码不卡啪啪| 欧美激情片一区二区| 色爱三区| 国产一级高跟丝袜| 日本操逼视频在线| 91成人亚洲色图| 牛牛久久国产精品视频一二三| 破苞ⅩXXX性无码动漫无码| 涩综合导航| 后入式999| 天美欧美国产| 综合网欧| 激情图片伦理国产一区二区日韩| 成人综合久久精品色婷婷| 麻豆视频一区二区| 可乐操在线| 韩日男人的天堂| 色哟哟综合| 啪啪啪综合网| 国语少妇精| 91麻豆天美国产欧美高潮| 玖玖资源中文字幕制服丝袜| 国产性刺激| 蜜臀国产AV中文字幕| JIZZJIZZ国产精品喷水| 国产精品一区二区校花| 99re热有精品视频国产| 婷婷超| 2017天天插| 欧美97色| 国产女同在线观看视频| 私人尤物在线精品不卡| 土豪酒店各种姿势玩弄极品幼稚| 欧美亚洲第1页| 91超级碰| 98色网| 伊人久久88国产女| 中美日韩毛片| 老汉网| 丝袜美腿校园春色| 大香蕉青青9| 激情小说亚洲图片| 97欧美色综合| 亚洲欧美日韩不卡人妻| 欧美精品成人一区二区在线观看 | 人妻啊啊人妻啊啊| 十八禁网站在线| 国产性感在线观看| 天天综合网1| 青娱乐手机日韩在线视频| 欧美日韩精品国产91| 色综合超碰超| 亚洲男人天堂2017| 亚洲无码精品AV久久久| 无码操逼网| 一,爱啪啪,在线免费视频| 91人妻尻屄视频| 亚洲AV成人在线| www.激情| 日韩三级在线观看mp4| 天天干天天日天天射黄色大片| 久久精品天美| 日韩电影中文字幕| 精品三级在线专区| 色乱二区| 98色网| 久超碰在| 91久久精品美女高潮喷水| 亚洲综合伊人无码久久| 亚欧毛片基地国产毛片基地| 大香蕉五月天婷婷| 亚洲国产综合久久天堂| 9 9无尺码天堂网| 97超碰精品| 第四色奇米影视777| 日韩精品在线观看网站| baisiav| 91天射| 麻豆性爱视频在线播放| 亚洲。日韩。欧美| 91宗合网| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 天天综合网91| 99人人干| 少妇内射www在线观看视频 | 91啪9色| 97超碰超欧美。| 中文字幕第2页| 18啪啪手机免费性爱| 欧美性爱伊人| 亚洲爱爱视频一区二区| 国产操逼网站亚洲一级黄色| 三级网色| 久久久九九九九| 97色综合中文网| 免费在线黄片视频| 91色爽欧美| 亚洲欧美另类图片| 综合啪啪| 婷婷探花久久精品一区| 亚洲伊人a线观看视频| 久久99综合| 亚州高清色综合| 东北少妇高潮zzzz| 一区二区三区在线资源| 精产品久久| 噜噜噜在线视频| 91丨九色丨大屁股| 台湾佬大香蕉| 婷婷久月| 99久久99九九99九九九| 国产激情在线观看| 高清孕妇孕交 交孕妇| 交换娇妻呻吟声不停中文字幕| 国产av白丝| 日韩色| 婷色五月天| 国产精品另类一区大香蕉| 99热99在线播放激情| 久久m| 手机在线免费看的av| 9久久9综合| 精品视频在线观看| 久久一区无码| 国产一区二区成人av在线播放| 台湾肥佬网一区二区三区| 97超碰人人操人人操| 亚洲不卡不卡中文字幕不卡| 国产精品久久久 | 欧美综合站| 性91| 91九久| 久久亚洲中文字幕视频| 综合91网| 丁香激情网| 男人天堂欧美| 在线观看A啊啊啊| 中文字幕一二区二三区人妻专区| 人妻 欧美 中文| 秋霞蝌科网日本一区| 国产白丝网站| 中文字幕丝袜人妻| 中文字幕一区二区韩| 亚洲极品| 丁香五月激情综合| 亚洲欧美碰碰| av线电影| 色噜噜综合在线| 狠狠婷婷亚洲中文综合久久| 丝袜av一区二区三区| 久久久久亚洲Aⅴ无码| 91日韩网站| 久久婷综合| 欧美亚洲丝袜美女电影| 亚洲 中文字幕 精品| 无码久| 丁香五月影院| 100啪啪视频大全| 91色图片| 色婷婷电影网| 激情 欧美 亚洲 小说| 另类专区加勒比| 久久久精品国产亚洲伊人| 人妻性爱一区二区| 美女网站91| 亚洲天堂情色| 日本 欧美 亚中文字幕| 黄色AAAAA欧美| 久久伊人东京热| 黄色不卡视频| 亚州精品一区二区三区香中文字幕在线| 亚洲影院无码在线| 极品少妇久久久| 免费网站观看www在线观| 熟女六十路| 热久久国产| 91精品人妻一区二区三区蜜臀| 97色视频在线| 99色| wwwcaobibi| 亚洲精品一二区| AV中亚| 久久久熟女一区| 亚洲综合另类欧美久久久| 簧片免费看视频| 亚洲好看强奸乱伦| www国产无码| 91亚洲人| 成人区人妻精品一| 在线电影亚洲色图| 色眯眯av| 日韩中文字幕宗合在线| 久久人体一区二区| 骚熟女吞| 天天日天天舔东京热| 色嘟嘟人妻天堂网| 人妻少妇一区二区| 深夜操逼网| 色色激情| 色色五月丁香| 婷婷五月天久久久| av国产无码| 1769一区二区| 一级A片女人高潮叫床| 国产一区在线观看无码AV| 国产亚洲色停停久久99精品91| 国产91美女视频| 国产超碰97| 国产丝袜高跟美女av免费观看| 欧美成人色| a男人的天堂| 欧美曰韩国产精品| 一区二区三区四区久久视1| 九九玖玖精品| 九九久久久九九| 国产乱伦一二三区| 操操AV电影| 日韩三级一区| 久久久久久久少妇| 综合网亚| 青青草黑寡妇男人天堂| 91精品婷婷国产综合久久竹菊| 嗯嗯啊啊视频一区二区三区| 欧美aⅴ99久久黑人专区| 久久99草| 91人妻久久久久久久久久久久久| 射丝袜高跟鞋99| 亚洲免费人妻在| 婷婷午夜| 旡码电影特区| 成人五月天色网| 欧洲色综合| 亚洲图片另类| 欧美成人A√在线一区二区| 免费一级a毛片久久久久久鸭绿欲| 蜜乳av一区二区| 亚洲熟伦熟妇AV无码春色| 久久久一区二区三区三州| 国产一区二区精品久久99| 日韩丝袜二区| 私色综合网| 三级网站超变态精品| 97超碰这里只有精品| 欧美综合色图网| 中文字幕人妻资源在线| 国产精品一级毛片不卡视| 99热这里只有精品9| 无码人妻丰满熟妇奶水区毛片| 亚洲视频二区| 午夜αv| 你懂的在线观看区国产| 草莓精品视频| 色精品极品| 劲爆欧美人妖三区91| 伊人九九九| 久久透逼视频| 蜜桃臀av在线观看| 亚州五月| 精品人妻一区二区三区四区石在线| 岛国片国产成人亚洲播放| AV大香蕉| 日韩av色图| A片大香蕉在线| 色婷婷久久| 9久久美女首页| 欧美一二三| 国内三级自拍小视频在线观看| 禁十八久久| 96超碰网| 國產尤物AV尤物在線觀看| 91久久久久久久久久久| 男人的天堂com| 波多野结衣被操50分钟免费视频| 草草影院在线视频| 欧美色自拍| 婷婷干黄色| 97久久精品亚洲| 国产女主播视频在线观看| 奇米四色网| 日本啊啊啊啊啊视频| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | aV中文麻| 999岛国大片| 欧美成人国产精品| 国产精品熟女九色九色蜜臀| 国产精品91一样| 中文字幕青青草| 日韩欧美午夜视频在线| 五十路熟女工口| 操一操摸一摸| 久久极品一区二区| 天天噜| 99热综合| 欧美日韩久久精品爱爱| 九色视频91| 在线天堂资源亚洲| 狠狠色婷婷777| 久久禁| 国产小u女在线观看| 疯操AV| 欧美成人黄网色网站| 久久视频,这里只有精品| 免费αⅴ在线观看| www.91欧美| 日本高清有码网址视频| 美女爽爽爽刺痛洞洞| 黄色AAAAAAAAAAA大片| 伊人991| 极品美女福利在线观看| 欧美写真视频一区| 神马久久久久久伦理片| A一级色女| 国产日韩在线播放| 丁香九月婷婷| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 亚洲欧美视| 大香蕉黄色一区| 欧美亚洲首页| 骚货| 黄色免费网页无码| 亚洲狠狠入| 亚洲 综合 欧美| 久久产精品一区二区三区电影| 久久、1234| 福利在线观看一区二区| 91国产丝袜白虎| 国产超碰国产97| 国产操偷| 日本女人久久久| 嗯嗯嗯啊啊啊操的我好爽| 美国精品国产精品| 殴美性天天| 日韩av色图综合| 欧美日本国产日韩激情视频| 理论久久婷婷网8| 99操| 婷婷91| 成人精品久久久午夜福利| 制服丝袜第二页| 精品一区二区三区最新| 白天啪啪晚上啪啪视频| 97伦综合| 超碰碰97| 色噜噜综合在线| 双插性欧美一二三区| 久久久精品,3| 亚洲区限制级| 人妻天天爽夜夜爽爽| 国产毛片在线| 久久99国产精品| 亚洲色丰满少妇高潮| 国产精品乱人伊人网| 国产熟女免费观看久久| 97日韩| 加勒比久久av| 高潮嗯啊性感美女久久久| 久久久婷婷婷| 亚洲精品天堂久久A∨51成人漫| 九九九草| 和协影院中文字幕三区| 久久黄色网址| 国产又色又爽又舒服的三级视频| 怡春院久久| 国产精品乱码久久久、久久| 自拍盗摄一区| 亚洲夜色在线| 精品无码不卡视频| 亚洲色图尤物视频| 啊啊嗯嗯好爽| 国产97色在线 | 亚洲| 97在线欧| 欧美色日| 97爱b| 欧美精品丝袜久久久中文字幕| 天美传媒av 在线| 九九综合久久| 国产精品一区二区三区,亚洲综合| 国产h小视频在线观看免费| 精…码一二三区| 女人香蕉久久毛毛片精品| 99re在线视频| 黄色片G G G| 校园春色中文字幕AV| 精品人妻1237| 国产精品久久久视频| 天天做日日爱夜夜爽| 欧美,日韩,亚洲视频| 在线岛| 另类TS人妖一区二区三区| 人人操我人人干| 性色AV网站| 91久久| 日韩一级二级三级免费看完整版| 亚洲高清自拍| 精品人妻一区二区三区日产乱码| 欧美亚洲手机在线| 婷婷午夜清品久久久久久久性色视频观| 91欧美www| 亚洲女人91| 国产视频第二页| 中文字幕免费在线观看| 清纯唯美综合| 亚洲欧美伦综合| 亚洲色阁| 秋霞网—男女啪啪亚洲免费体验区| 国产亚洲精品一区二区三区| 国产肏逼网站| 福利操逼| 青青草天天亲夜夜操网| 五月丁香大香蕉| 欧美第一页性| 欧美一级专区免费大片| 啊啊啊啊好疼视频| 97久久超碰日韩精品| 亚欧成人一级片在线播放| 日韩黄色片子| 日韩亚洲中文字幕在线| AAA久久| 亚洲男人的天堂一区二区| 好吊色一区| 色哟哟精品1精品2| 97超碰欧美手机| 国产欧美日韩一区二区三区| 91快色色色色色| 色婷婷色99国产综合精品| 色狠狠综合噜一二三区| 天美传媒AV国产在线| 中文在线视频| 精品免费一区| 国产a级午夜毛片| 长长久久曰曰夜夜成人网| 国产熟女一区二区丰满| 精品视频一区二区| 日本潮催一卡操| www色日本| 一区二区三区 丝袜 高跟 美腿| 久久精品国产久精国产| 亚洲人综合19| 欧美日韩亚洲一区二区在线观看| 丁香六月综合激情| 亚洲中文字幕日产无码久久| 大香蕉手机在线| 欧美呦呦性爱| 伊人久久婷婷| 狠狠躁天天躁日日躁| 亚洲欧美91| 国产亚洲色婷婷久久99精品91葵花宝典 | 99国内精品| 色妇91| 国产肏逼网站| 99爱爱| 亚洲老司机123专区| 欧美第一页| 天天操天天干一区二区| 国产欧美日韩女同性恋ww喷水精品| 无码欧美有限公司| 97国产|免费| 3d成人精品一区二区| 亚射在线| 超碰九7| 人看人人摸人人操| 欧美亚洲国产日本在线,久久精品国产| 亚洲一二三四区| 激情五月天社区| 玖玖爱综合网| 日韩综合成人免费视频| 狠狠 91| 美女啊啊啊啊啊| 国产精品自产拍在线观看社区| 色婷婷婷五月天激情四射| 午夜噜噜噜| 久久久精品视频免费观看| 密臀AV在线| 日日夜夜天天| 一区二区免费电影久久| 熟女熟妇一区二区三区视频| 99精品在线| 狠肏骚人妻| 精品九九| 日韩一区二区熟女| 亚洲男人综合| 蜜桃臀 后入 一区 二区 三区 在线| 亚洲中文字幕熟女少妇一区二区| 亚欧Av| 久操视频在线| 免费一级视频特黄色大片| 69丨亚洲丨精品丨入口免费播放| 精品一区二区成人| 亚洲熟久久| 高潮毛片无遮挡高清免费| 亚洲青色欧美| 国产亚洲日韩在线三区黑人| 双插在线| 性爱乱伦网址| 国产热av| 久久久久久国产无码精品| 色香网| 爱媛媛久久国产福利| 人妻少妇无码 | 老熟女熟妇| 五月丁香黄色网| 91天美传媒精品| 日韩美女操b| 九九人妻| www.99色| 欧美日韩另类在线播放| 夜夜操一区二区| 日韩一级成人毛片免费观看| 国内精品久9| 国产亚洲99久久精品| 97碰碰色| 欧美一二在线| 亚洲成人一区二区精品| 欧美中字二区| a天堂视频| 校园春色AV天堂| 青青草视频在线观看一区二区| 国产无码精品成人| 色制服丝袜夫妻av一区| 97人人操人人干| 夜夜嗨视频| 情色五月天久久久| 国产精品久久久久久久久AV大片| 日本ZZ高免费A级视频| www.婷婷五月天| 亚洲 欧美 日韩 国产一区二区| 国产黄色动态精品| 青娱乐国产精品| 国产强奸乱伦第1页| 色诱中文字幕| 亚洲成人福利电影免费| 国产h小视频在线观看免费| 一区二区三区四区姦女| 屁屁影院一区二区三区国产 | AV 少妇 人妻 偷拍| 精品久久久av无码免费| 秋霞男人网| 97碰在线视频| 欧美亚洲国产91在线| 日韩9999| 啊啊啊用力在线观看| 国产欧美日韩一区二区三区| 屁股久久久久久久久| 插入综合网| 1024人妻熟女一区二区三区| 啪啪自拍九九综合| 99黄页网站| 国产999精品久久久久久| 91强热人妻| 日韩三级伊人| 国产蜜臀在线| 北条麻妃性愛视频| 人妻啊啊人妻啊| 97欧美性爱| ,成人免费啪啪视频| 超碰97.com| 欧美色66| 精品射1999| av九九| 婷婷视频在线免费观看| 91精品久久久| 啊啊啊想要| 99re6国产精品99re| 佐山爱中文字幕| 日韩欧美视频青青| 国产超碰在线| 自拍鲍鱼一区在线高清观看免费| 日韩操p| 日韩免费福利在线观看| 五十路一区无码| 欧美图片色五月天| 涩亚洲欧洲| 四虎在线播放| 精品久久久久久久久久久久| 嗯嗯嗯啊啊啊操的我好爽| 开心激情站| 一区二区激情国产熟女| 日本精品成人无码| 极品尤物女神在线观看| 国产美女高潮叫床视频| 曰韩操B| 牛牛操视频逼| 国产女同视频在线播放| 亚洲日韩在线a不卡99精品| 国产精品一区二区密臀| 欧美人妖内射| 亚洲欧美综合网 | 色官网在线| JULIA一区二区三区在线播放| 9久久9综合| 大吊色| 欧美综合第一| baiduhicn.com。| 91美女视频在线免费观看| 熟女中出视频| 91精品国产乱码| 久久精品高清无码一区| 亚洲超碰综合网| 91痴汉| 成人精品久久| 欧美亚洲| 男女无套 免费网站| 91欧美在线| 两女互慰AV高潮喷水在线观看| 日韩性爱小视频| 欧美一级AAAAAAA| 夜夜影视四色| 黄色av一区二区在线| www.婷婷| 玖玖视频在线资源一区二区三区| 久久久蜜桃一区二区三区| 天堂资源欧美| 精品国产国产AV| 亚州九九九精品视频| 精品丰满熟妇人妻一区| 天天综合中文字幕 91| 97综合久久| a片在线播放| 亚洲啪啪视频一区二区| 五月婷婷六月丁香| 精品网站9999| 黄色二级片网站| 夜夜做夜夜爽精品视频| 欧美大的香蕉有线电视视频| 亚洲**2021在线观看| 国产精品极品美女视频| 天天色综亚洲91污| 97久精品| 五十路人妻在线| 蜜臀久久99精品久久久电影| 69XX一中文字幕人妻91| 操逼视频亚洲| 一区二区偷拍拍视频| 丝袜天堂网| 91美女视频在线免费观看| 久久99精品九九久久久婷婷| 黄久在线| 色97干| 韩国免费播放一级毛片| 尤物黄色在线观看网站| 久久黄黄| 嗯嗯啊好大| 精品免费囯产一区二区三区| 欧美高清第一页| 免费观看有码高清视频| 丰满美女一级毛片在线播放| 国产呦精品系列在线观看| 国产精品网址| 日韩啪啪啪啪啪| 久久9精品网站| 草草草视频在线免费看| 爱av免费| 91/欧美| 玖玖久久久| 丁香五月自拍| 青青草乱入乱欲视频在线观看| 丰满人妻一区二区中文| 日日夜夜精品视频| 激情五月天色色网| 青青草玖玖爱| 亚洲日韩在线a不卡99精品| 九九九九久久久| 中字一区| 亚洲精品性爱片| 97色爱| 成人怡红院| 发朗少妇买婬全视频中文| 欧洲精品久久| av中亚| 大香樵伊人网| 少妇熟女视频一二三区| 免费强奸av| 老熟妇一区二区三区啪啪| 先锋激情∨在线视频播放| 玖玖97综合| 玖玖爱伊人玖玖爱| 蜜乳AV一区二区三区四| 色香在线| 亚洲av综合色区无码一| 超碰人妻中文在线| 少妇被玩视频二三区| 97综合激情| 欧美强奸一区二区诱惑| 日本高清一本二本免费不卡| 一本久道在线综合视频| 麻豆精品天美| 五十路六十路七十路熟婆| 色五月天AV| 免费αV在线视频| 91欧美| 999精品久久久久久久| 五月丁香啪啪网| 男人的天堂免费| 东京热亚洲一区二区| 91情色| 欧插网站| 人妻啪| 久久久久网站-538在线视频-欧美永久乱码 | 亚州综合色图| 嗯啊抽插大香蕉网页| 搞中出视频在线观看| 日韩精品1区2区中文字幕| 免费成人在线熟妇网| 久久男人精品| 久久久久久久综合,国产| 69精品久久久久中文字幕| 欧美在线电影| 长长久久曰曰夜夜成人网| 2024年最新色情网站在线观看| 干B视频伊人网| 亚洲熟女性高潮久久久| 99re在线视频| 成人av免费观看| 国产精品人妻无码久久久互動交流 | 欧美刺激色黄片免费看| 丰满熟女人妻一区二区三五十一路| 狠狠穞A片一區二區三區| 国产久久久久久| 情侣操 逼视频99| 黄色高清无码无码破解免费暗网| 美女黑人91神马| 婷婷久久五月天| WWW.操逼.COM| 天堂综合| 成功精品影院| 亚洲图片色图欧美另类| 综合网亚洲1| 一二三啪啪专区| 欧美精品日韩久久久九| 中国少妇啪啪视频| 男人的天堂激情| 国产综合操逼高清| 国产真实子伦对白| 精品小视频在线| www.色综合| 97干在线视频| 91高潮喷水美女| 激情五月婷婷| 在线中文字幕极品av| 97超碰9| 嗯嗯啊啊的视频| 黄色AV影视| 亚洲国产成人精品无码专区| 东京热综合久久一区二区| 久久综合av| 嗯啊不要在线| 性爱精品一区| 2023天天操夜夜操| 可乐操亚洲蜜911| 九九英色视频| 女优视频第10页| 国产精品久久久久久久黄无码| 白丝av| 欧美小说区视频区| 亚洲欧美九九| 日韩人妻一区二区精品| 国产激情在线| 亚洲精品久久久久久| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 中文在线视频| 国产白领连续中出在线观看| AV九九| 少妇xx精品| 高清国产成人无码| 亚洲天堂男人天堂| 超碰超碰超碰超碰的大鸡吧操黑丝袜 | 欧洲乱码视频| 五月天婷婷综合网| 亚洲色图尤物视频| 欧美福利视频啊啊啊啊| 亚洲情色综合网| 亚洲精品蜜桃久久久久久久| 好淫网一二三视区| 91在线页| 色婷婷基地| 超碰久热| 婷婷AV一区二区三区| 日本色色的视频| 国产精品成人无码a v毛片| 天天日天天看| 一二三四区电影| 少妇精品久久久| 97超碰超欧美。| 狠狠躁天天躁日日躁| 久操在97| 青久操| 999 久久久| 日本淫穴在线| 91男人天堂网| 四虎永久在线精品免费网址 | 色牛aV| 91欧美www| 啊啊啊啊嗯嗯在线久久久| 人人澡人人干| 天美麻豆一区二区三区| 色香欲影| 偷拍盗拍亚洲色图图片 | 无码av永久免费专区网站| 美国日韩黄片| 岛国1区2区3区在线观看| 日日噜噜夜夜狠狠视频无| 国产av激情无码久久天堂|