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

淺析二叉樹的層次遍歷和最大深度

開發 前端
在講解二叉樹的時候,提到二叉樹的遍歷除了前中后序遍歷,還有層次遍歷。前中后序這三種遍歷方法以及可以通過遞歸的方式實現了,那么今天就來講講層次遍歷吧!

 [[375572]]

在講解二叉樹的時候,提到二叉樹的遍歷除了前中后序遍歷,還有層次遍歷。

前中后序這三種遍歷方法以及可以通過遞歸的方式實現了,那么今天就來講講層次遍歷吧!

LeetCode 第 102題:二叉樹的層次遍歷

給你一個二叉樹,請你返回其按 層序遍歷 得到的節點值。(即逐層地,從左到右訪問所有節點)。

  1. 示例:  
  2. 二叉樹:[3,9,20,null,null,15,7],  
  3. #     3 
  4. #   / \ 
  5. #  9  20 
  6. #    /  \ 
  7. #   15   7 
  8. 返回其層次遍歷結果:  
  9.  [3], 
  10.  [9,20], 
  11.  [15,7] 

對于這道二叉樹題目,我們要遍歷每一層的每一個節點,可以考慮分別用BFS(廣度優先搜索)和DFS(深度優先搜索)來解決,下面先簡單介紹BFS,后續文章繼續深入。

有兩種通用的遍歷樹的策略:

深度優先搜索算法(英語:Depth-First-Search,簡稱DFS)是一種用于遍歷或搜索樹或圖的算法。沿著樹的深度遍歷樹的節點,盡可能深的搜索樹的分支。當節點的所在邊都己被探尋過,搜索將回溯到發現節點的那條邊的起始節點。

深度優先搜索策略又可以根據根節點、左孩子和右孩子的相對順序被細分為先序遍歷,中序遍歷和后序遍歷。

寬度優先搜索算法(又稱廣度優先搜索 英語:Breadth-First Search, 簡稱BFS )

我們按照高度順序一層一層的訪問整棵樹,高層次的節點將會比低層次的節點先被訪問到,最短路徑問題常用此算法。

本題就是用廣度優先搜索,對二叉樹按照層進行搜索,搜索邏輯如下圖所示:


根據我們熟悉的BFS搜索方法,二叉樹的層次遍歷,關鍵要用到隊列,父結點出,就要判斷子結點是否為空,非空則馬上進入隊列,類似廣度優先queue隊列。

把每個沒有搜索到的點依次放入隊列,然后再彈出隊列的頭部元素作為當前遍歷節點,并進行記錄。接下來對此節點的所有相鄰節點進行搜索,將所有有效且未被訪問過的節點壓入隊列中。

  1. # Definition for a binary tree node. 
  2. # class TreeNode: 
  3. #     def __init__(self, x): 
  4. #         self.val = x 
  5. #         self.left = None 
  6. #         self.right = None 
  7. from collections import deque 
  8.  
  9. class Solution(object): 
  10.     def levelOrder(self, root): 
  11.         res = [] 
  12.         if root is None: 
  13.             return res 
  14.         q = deque([root]) 
  15.         res.append([root.val]) 
  16.         while q: 
  17.             size = len(q) 
  18.             level = [] 
  19.             for i in range(size): 
  20.                 node = q.popleft() 
  21.                 if node.left != None: 
  22.                     q.append(node.left
  23.                     level.append(node.left.val) 
  24.                 if node.right != None: 
  25.                     q.append(node.right
  26.                     level.append(node.right.val) 
  27.             if level
  28.                 res.append(level
  29.         return res 

LeetCode 第 107題:二叉樹的層次遍歷II

給定一個二叉樹,返回其節點值自底向上的層次遍歷。(即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷)

  1. #給定二叉樹 [3,9,20,null,null,15,7],  
  2. #     3 
  3. #   / \ 
  4. #  9  20 
  5. #    /  \ 
  6. #   15   7 
  7. # 返回其自底向上的層次遍歷為:  
  8. # [ 
  9. #  [15,7], 
  10. #  [9,20], 
  11. #  [3] 
  12. #] 
  13. # Related Topics 樹 廣度優先搜索 

和LeetCode 第 102題:二叉樹的層次遍歷完全一樣,就是最后的結果改為return res[::-1]

  1. class Solution: 
  2.     def levelOrderBottom(self, root: TreeNode) -> List[List[int]]: 
  3.         res = [] 
  4.         if root is None: 
  5.             return res 
  6.         q = deque([root]) 
  7.         res.append([root.val]) 
  8.         while q: 
  9.             size = len(q) 
  10.             level = [] 
  11.             for i in range(size): 
  12.                 node = q.popleft() 
  13.                 if node.left != None: 
  14.                     q.append(node.left
  15.                     level.append(node.left.val) 
  16.                 if node.right != None: 
  17.                     q.append(node.right
  18.                     level.append(node.right.val) 
  19.             if level
  20.                 res.append(level
  21.         return res[::-1] 

LeetCode 第 104題:二叉樹的最大深度

給定一個二叉樹,找出其最大深度。

  1. # 二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。  
  2. # 說明: 葉子節點是指沒有子節點的節點。  
  3. # 示例:  
  4. #給定二叉樹 [3,9,20,null,null,15,7],  
  5. #     3 
  6. #   / \ 
  7. #  9  20 
  8. #    /  \ 
  9. #   15   7  
  10. # 返回它的最大深度 3 。  
  11. # Related Topics 樹 深度優先搜索 

看到該題目,首先想到的是使用遞歸來實現,遞歸的基本條件是訪問到根節點(左右子樹為空);遞歸條件是訪問左子樹或右子樹;中間處理邏輯是將子樹深度+1,即為最終深度。

  1. # class TreeNode: 
  2. #     def __init__(self, x): 
  3. #         self.val = x 
  4. #         self.left = None 
  5. #         self.right = None 
  6.  
  7. class Solution: 
  8.  # 簡化的遞歸 
  9.  def maxDepth(self, root: TreeNode) -> int
  10.         if not root: 
  11.             return 0 
  12.         return max(self.maxDepth(root.left), self.maxDepth(root.right))+1 
  13.  def maxDepth(self, root: TreeNode) -> int:   
  14.   if not root: return 0  
  15.   # 分別得到左右子樹的最大深度 
  16.   left = self.maxDepth(root.left)     
  17.   right = self.maxDepth(root.right)     
  18.   return max(leftright) +1 

LeetCode 第 110題:平衡二叉樹

給定一個二叉樹,判斷它是否是高度平衡的二叉樹。

  1. # 本題中,一棵高度平衡二叉樹定義為:  
  2. # 一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。  
  3. # 示例 1:  
  4. # 給定二叉樹 [3,9,20,null,null,15,7]  
  5. #     3 
  6. #   / \ 
  7. #  9  20 
  8. #    /  \ 
  9. #   15   7  
  10. # 返回 true 。  
  11. #示例 2:  
  12. # 給定二叉樹 [1,2,2,3,3,null,null,4,4]  
  13. #        1 
  14. #      / \ 
  15. #     2   2 
  16. #    / \ 
  17. #   3   3 
  18. #  / \ 
  19. # 4   4 
  20. # 返回 false 。  
  21. # Related Topics 樹 深度優先搜索 

定義一個獲取當前節點高度的方法, 可以參考上面:求二叉樹的最大深度

左右兩個子樹的高度差的絕對值超過1,則為false

如果當前節點的左右子樹滿足高度差的絕對值不超過1,則需要繼續判斷其左右子樹分別是否是平衡二叉樹。

對于每個節點,左子樹和右子樹都是平衡樹,并且得到左子樹和右子樹的高度,只要高度差小于1,則為true。

  1. # Definition for a binary tree node. 
  2. # class TreeNode(object): 
  3. #     def __init__(self, x): 
  4. #         self.val = x 
  5. #         self.left = None 
  6. #         self.right = None 
  7.  
  8. class Solution: 
  9.     def isBalanced(self, root: TreeNode) -> bool: 
  10.         if not root: return True 
  11.         return abs(self.depth(root.left) - self.depth(root.right)) <= 1 and \ 
  12.             self.isBalanced(root.leftand self.isBalanced(root.right
  13.  
  14.     def depth(self, root): 
  15.         if not root: return 0 
  16.         return max(self.depth(root.left), self.depth(root.right)) +  

但是時間復雜度卻是,可以采用DFS(深度優先搜索)

  • 對二叉樹做深度優先遍歷DFS,遞歸過程中:
  • 終止條件:當DFS越過葉子節點時,返回高度0;
  • 返回值:從底至頂,返回以每個節點root為根節點的子樹最大高度(左右子樹中最大的高度值加1 max(left,right) + 1);
  • 當我們發現有一例 左/右子樹高度差 > 1 的情況時,代表此樹不是平衡樹,返回-1;
  • 當發現不是平衡樹時,后面的高度計算都沒有意義了,因此一路返回-1,避免后續多余計算。

最差情況是對樹做一遍完整DFS,時間復雜度為 O(N)。

  1. class Solution: 
  2.     def isBalanced(self, root: TreeNode) -> bool: 
  3.         return self.depth(root) != -1 
  4.  
  5.     def depth(self, root): 
  6.         if not root: return 0 
  7.         left = self.depth(root.left
  8.         if left == -1: return -1 
  9.         right = self.depth(root.right
  10.         if right == -1: return -1 
  11.         return max(leftright) + 1 if abs(left - right) < 2 else -1 

本文已收錄 GitHub https://github.com/MaoliRUNsen/runsenlearnpy100更多的文章

 

責任編輯:姜華 來源: Python之王
相關推薦

2021-09-15 07:56:32

二叉樹層次遍歷

2020-04-27 07:05:58

二叉樹左子樹右子樹

2009-08-11 13:29:57

C#二叉樹遍歷

2022-10-26 23:58:02

二叉樹數組算法

2021-04-20 08:37:14

數據結構二叉樹

2023-05-08 15:57:16

二叉樹數據結構

2021-09-15 07:40:50

二叉樹數據結構算法

2021-04-19 07:47:42

數據結構二叉樹Tree

2021-07-13 11:32:41

二叉樹數據結構算法

2021-04-28 20:12:27

數據結構創建

2024-01-23 12:54:00

C++編程語言代碼

2021-08-27 11:36:44

二叉樹回溯節點

2021-09-29 10:19:00

算法平衡二叉樹

2021-03-17 08:19:22

二叉樹LeetCode

2013-07-15 16:35:55

二叉樹迭代器

2020-09-23 18:25:40

算法二叉樹多叉樹

2021-10-12 09:25:11

二叉樹樹形結構

2018-03-15 08:31:57

二叉樹存儲結構

2021-03-22 08:23:29

LeetCode二叉樹節點

2021-05-06 17:46:30

二叉樹數據結構
點贊
收藏

51CTO技術棧公眾號

日韩免费va| 中文字幕一区二区三区人妻四季| 91精品国产经典在线观看| 国产欧美日产一区| 亚洲一区亚洲二区| 91香蕉在线视频| 成人免费在线观看av| 日韩视频在线永久播放| 中国一区二区三区| 天天综合网在线| 美女在线一区二区| 色伦专区97中文字幕| 国产51自产区| 深夜福利国产精品| 国产乱码一区| 久久久久女人精品毛片九一| 久久免费av| 日韩av一区在线| 中文字幕 日韩 欧美| 欧美jizz18性欧美| 97aⅴ精品视频一二三区| 国产有码一区二区| 中文字幕在线看人| 在线观看一区| 精品小视频在线| 免费高清视频在线观看| 欧美日韩尤物久久| 欧美视频中文在线看| 亚洲色图都市激情| 9191在线| 欧美激情一区二区三区全黄| 国产在线观看一区二区三区| 伊人手机在线视频| 成人羞羞网站入口免费| 亚洲国产精品久久久久| 日本一二三区在线| 国产精品美女午夜爽爽| 色天天综合久久久久综合片| 国产免费黄色小视频| caoporn免费在线| 91亚洲精品久久久蜜桃| 99一区二区三区| 国产精品无码久久av| 日本不卡在线视频| 国产精品久久久av久久久| 欧美日韩乱国产| 亚洲欧美大片| 欧美一级淫片videoshd| 精品成人久久久| 日韩午夜在线| 欧美一级免费看| 婷婷激情五月网| 国产欧美一级| 日韩av手机在线| 无码人妻精品一区二区三区不卡| 国产国产精品| 久久精品国产综合| 欧洲第一无人区观看| 欧美在线三级| 欧美极品美女电影一区| 国产真实夫妇交换视频| 欧美日韩在线观看视频小说| 亚洲石原莉奈一区二区在线观看| 亚洲欧洲日韩综合| 亚洲无线观看| 亚洲精品99999| 亚洲精品在线网址| 在这里有精品| 日韩av在线免费播放| 一出一进一爽一粗一大视频| 蜜桃精品wwwmitaows| 在线观看精品国产视频| 91插插插插插插| 国产99久久久国产精品成人免费| 日韩精品影音先锋| 久久人妻一区二区| 欧美在线电影| 美女啪啪无遮挡免费久久网站| 欧美福利第一页| 99久久www免费| 欧美大片免费观看| 四虎永久免费在线| 91久久视频| 日本久久久久亚洲中字幕| 国产亚洲久一区二区| 国产在线精品免费av| 国产乱码一区| av电影在线网| 亚洲一区二区三区四区不卡| 免费观看精品视频| 黄在线观看免费网站ktv| 在线观看国产日韩| 天天干天天干天天干天天干天天干| 黄色污网站在线观看| 欧美性猛交xxxxxxxx| 性一交一黄一片| 国模吧精品视频| 久久91精品国产91久久跳| 国产女同在线观看| 国产欧美另类| 亚洲japanese制服美女| 亚洲 精品 综合 精品 自拍| 欧美激情在线免费观看| 欧美久久在线观看| 亚洲91在线| 精品视频中文字幕| www.av欧美| 狠狠88综合久久久久综合网| 久久久久久久久久久久久久久久久久av | 国产精品观看在线亚洲人成网| 日韩精品在线免费视频| 精品系列免费在线观看| 91精品网站| www在线免费观看| 亚洲午夜免费福利视频| 亚洲欧洲日本精品| 丝袜连裤袜欧美激情日韩| 精品无人区乱码1区2区3区在线| 国产偷人妻精品一区| 伊人久久大香线蕉综合四虎小说| 欧美福利视频在线| 国产精品免费无遮挡无码永久视频| 三级精品在线观看| 国产欧美欧洲| 日本小视频在线免费观看| 欧美吻胸吃奶大尺度电影 | 国产激情在线观看| 91国偷自产一区二区开放时间| 无限资源日本好片| 亚洲精品aaaaa| 久久久久久久久久国产精品| 国产精品777777| 成人视屏免费看| 四虎永久免费网站| 在线观看欧美| 久久精品亚洲94久久精品| 自拍偷拍色综合| 国产亚洲人成网站| 亚洲爆乳无码专区| 欧美人妖视频| 中文字幕在线看视频国产欧美| 九九热只有精品| 国产一区二区毛片| 欧美精品一区三区在线观看| a在线视频v视频| 亚洲精品国产精品国自产在线| 四虎成人免费影院| 日本不卡高清视频| 一道精品一区二区三区| 欧美日韩破处视频| www.久久久久| av天堂一区二区三区| 亚洲精品午夜久久久| 日本黄色三级网站| 国产精品hd| 国产欧美日韩亚洲| 中文字幕在线看片| 国产亚洲激情在线| 日本少妇全体裸体洗澡| 91玉足脚交白嫩脚丫在线播放| 综合久久国产| 国产精品日韩精品在线播放| 亚洲欧美日韩一区二区三区在线| 久久久久亚洲av无码专区体验| 香蕉视频成人在线观看| 欧美激情第一页在线观看| 日韩深夜视频| 亚洲性视频网站| 国产一区二区三区三州| 久久久噜噜噜久久中文字幕色伊伊| 日韩成人午夜影院| 久久中文字幕导航| 国产精品69av| 黄黄的网站在线观看| 精品日韩一区二区三区免费视频| 手机在线中文字幕| 国产精品88888| 久草热视频在线观看| 国产一区二区三区91| 国产日韩在线看片| 黄网站在线观| 国产香蕉精品视频一区二区三区| 六月丁香婷婷综合| 不卡一区二区在线| 日本xxxxxxx免费视频| 一区二区免费不卡在线| 加勒比在线一区二区三区观看 | 亚洲91精品在线| 国产小视频在线| 91精品国产黑色紧身裤美女| 亚洲 欧美 视频| gogogo免费视频观看亚洲一| 中文字幕欧美人妻精品一区| 91超碰成人| 免费观看国产成人| 国产精选久久| 日产精品久久久一区二区福利| 蜜桃视频污在线观看| 一区二区三区欧美视频| 免费成人深夜夜行p站| 一本色道久久综合亚洲精品不卡 | 日本人妻丰满熟妇久久久久久| 一区二区三区日韩| youjizz亚洲女人| 波多野结衣中文字幕一区二区三区| 国产曰肥老太婆无遮挡| 日韩中文字幕高清在线观看| 好看的日韩精品视频在线| 日韩电影精品| 美女啪啪无遮挡免费久久网站| 国产极品999| 在线免费观看日本一区| 九九九国产视频| 综合网在线视频| 在线观看国产精品一区| 不卡的av电影| jjzz黄色片| 久久亚洲不卡| 狠狠干 狠狠操| 亚洲色图国产| 在线观看免费91| 欧洲grand老妇人| 91日韩在线视频| 日韩色淫视频| 国产精品xxxxx| 周于希免费高清在线观看| 一区二区三区四区在线观看视频| 国产精品嫩草影院桃色| 欧美羞羞免费网站| 国产91精品看黄网站在线观看| 国产精品欧美久久久久无广告 | 日韩精品在线观看av| 香蕉久久网站| 久久99精品国产99久久| 成人福利免费在线观看| 亚洲xxx视频| avtt久久| 91久久中文字幕| 香蕉伊大人中文在线观看| 欧美精品videos另类日本| av网站在线免费看推荐| 欧美不卡视频一区发布| 国产黄色在线观看| 萌白酱国产一区二区| 国产在线视频你懂得| 亚洲欧美国产精品久久久久久久| 国产麻豆91视频| 91精品国产全国免费观看 | 中文精品电影| 久久久久久久久网| 欧美久久综合| 超碰成人免费在线| 99在线观看免费视频精品观看| 日本黄色a视频| 在线中文字幕第一区| 欧美做受777cos| 欧美va天堂在线| av免费观看大全| 性娇小13――14欧美| 欧美精品第三页| 免费欧美日韩国产三级电影| 中文字幕22页| 国产精品99久久久久| 永久免费未满蜜桃| 久久色.com| 800av在线播放| 26uuu色噜噜精品一区二区| 日韩中文字幕有码| 亚洲欧洲无码一区二区三区| 久操视频免费在线观看| 精品欧美激情精品一区| 五月婷婷六月婷婷| 制服丝袜亚洲色图| 136福利视频导航| 日韩欧美国产小视频| ,亚洲人成毛片在线播放| 欧美在线免费播放| 国产乱叫456在线| 欧美日韩国产高清一区二区| 99精品在线视频观看| 亚洲第一精品夜夜躁人人躁| 男人的天堂在线| 欧美插天视频在线播放| 香蕉伊大人中文在线观看| 国产中文欧美精品| 欧美日韩大片免费观看| 亚洲欧洲免费无码| 亚洲理伦在线| mm131亚洲精品| 波多野结衣在线一区| 中文字幕在线观看二区| 亚洲国产aⅴ天堂久久| 在线观看国产区| 亚洲第一福利在线观看| 亚洲欧美视频一区二区| 午夜精品一区二区三区视频免费看| 国产免费拔擦拔擦8x高清在线人| 久久久久成人精品| 巨大黑人极品videos精品| 好看的日韩精品| 综合激情视频| 青青青国产在线视频| 成人国产精品视频| 希岛爱理中文字幕| 色呦呦一区二区三区| 亚洲精品久久久久久久久久 | 欧美在线视频一区二区| 国产精品亚洲四区在线观看| 久久久久天天天天| 午夜性色一区二区三区免费视频| 免费看欧美黑人毛片| 蜜臀av性久久久久av蜜臀妖精 | 综合久久av| 日本一区网站| 9色精品在线| wwwxxx色| 久久综合色婷婷| 精品亚洲aⅴ无码一区二区三区| 欧美极品美女视频| 国产情侣在线视频| 日韩精品一区在线观看| 好吊日视频在线观看| 国语自产精品视频在线看| 91久久青草| 正在播放亚洲| 免费成人性网站| 亚洲AV无码成人精品区明星换面 | 日韩国产欧美区| 欧洲黄色一区| 51精品国产人成在线观看| 好吊妞国产欧美日韩免费观看网站| 久久精品日产第一区二区三区 | 最新国产精品亚洲| 精品欧美日韩精品| 色播亚洲视频在线观看| 久久深夜福利| 精品成人av一区二区三区| 欧美日韩中文字幕在线| 人妻少妇精品无码专区久久| 久久久久久综合网天天| 在线播放一区二区精品视频| www国产免费| 粉嫩av一区二区三区在线播放 | 国产人妖乱国产精品人妖| 欧美一区二区三区不卡视频| 日韩精品在线免费| av网址在线看| 97视频热人人精品| 国产主播精品| 日本一级大毛片a一| 亚洲国产综合在线| 深爱五月激情五月| 精品国产区一区二区三区在线观看| 蜜桃视频在线观看播放| 精品在线视频一区二区| 免费亚洲一区| 色欲AV无码精品一区二区久久| 性久久久久久久久久久久 | 欧美久久一二区| 米奇精品一区二区三区| 亚洲free性xxxx护士hd| 精品亚洲成人| 亚洲精品免费一区亚洲精品免费精品一区 | 一区二区高清视频在线观看| 亚洲AV午夜精品| 91高清视频免费观看| 你懂的视频欧美| 91视频这里只有精品| 亚洲精品成人少妇| 中文字幕+乱码+中文乱码www| 日韩av在线不卡| 成人在线免费| 日韩精品一区二区免费| 91在线porny国产在线看| 一区二区视频播放| 欧美成人免费播放| 亚洲丁香日韩| 亚洲无在线观看| 亚洲777理论| 色大18成网站www在线观看| caoporen国产精品| 视频一区在线视频| 国产美女福利视频| 日韩av在线看| 精品一区二区三区免费看| 日日摸日日碰夜夜爽无码| 国产精品萝li| 中文字幕+乱码+中文| 欧美富婆性猛交| 国产真实有声精品录音| 亚洲欧美激情一区二区三区| 亚洲精品日产精品乱码不卡| 五月婷婷六月丁香综合| 国产中文字幕亚洲| 午夜在线一区二区| 全程偷拍露脸中年夫妇| 亚洲色无码播放| 精品按摩偷拍| 中文字幕精品一区二区三区在线| 国产精品理论在线观看|