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

自拍偷拍亚洲一区| 亚洲成人激情综合网| 国产精品美女在线观看| 色偷偷久久人人79超碰人人澡 | 欧美www.| 中文字幕一区二区三区不卡| 99精品在线直播| 天天干天天干天天| 天堂网在线观看国产精品| 日韩三级在线免费观看| 国产综合免费视频| yellow91字幕网在线| 99视频国产精品| 国产在线观看精品| 国产一级精品视频| 精品国产一区二区三区四区 | 亚洲美女视频在线| 久久精品中文字幕一区二区三区| 中文字幕乱码人妻二区三区| 韩日成人av| 国产亚洲激情视频在线| 久久久久久久久久影视| 高清成人在线| 精品福利视频导航| 一道本在线观看视频| 免费福利在线观看| 成人在线综合网站| 成人福利网站在线观看| 亚洲影院在线播放| 欧美1级日本1级| 中文字幕精品在线| 女尊高h男高潮呻吟| 成人偷拍自拍| 欧美一区二区三区在| 丝袜制服一区二区三区| 人人草在线视频| 一区二区三区中文免费| 国产高清精品软男同| 国产精品一区二区婷婷| 97久久久精品综合88久久| 91九色偷拍| 国产精品久久久久久免费| 日韩成人av影视| 欧美综合在线观看| 欧美另类精品xxxx孕妇| 一起操在线视频| 久久野战av| 欧美性色19p| 亚洲 欧美 日韩 国产综合 在线| 欧洲成人综合网| 亚洲免费三区一区二区| 中文字幕在线乱| 国产在线高清理伦片a| 国产精品久久久久久久久免费樱桃 | 欧美一级做a| 欧美精品免费视频| 涩涩网站在线看| 精品入口麻豆88视频| 7777女厕盗摄久久久| 国产福利精品一区二区三区| 国产精品高清一区二区| 91精品国产一区二区| 久久久精品视频国产| 高清一区二区中文字幕| 日韩一区二区三区视频在线观看| 小日子的在线观看免费第8集| 日韩中文字幕无砖| 精品国产欧美一区二区| 免费的av网站| 亚洲图片久久| 伊人伊成久久人综合网小说| 欧美日韩中文字幕视频| 国产精品88久久久久久| 欧美不卡视频一区发布| 久草视频在线资源站| 亚洲日韩成人| 国产精国产精品| 中文字幕自拍偷拍| 国产一区二区三区免费观看| 国产精品久久久久久久久婷婷| 色香蕉在线视频| 久久久噜噜噜久久人人看| 少妇特黄a一区二区三区| 国产淫片在线观看| 亚洲国产精品一区二区www| 5月婷婷6月丁香| 免费在线成人激情电影| 欧美一级一区二区| 91久久线看在观草草青青| 日本a级片免费观看| 国产激情欧美| 日韩欧美亚洲另类制服综合在线| 中国免费黄色片| av在线不卡免费观看| 欧美成年人视频网站欧美| 日本一区二区网站| 免费看欧美美女黄的网站| 99re视频在线| 国产精品久久久久一区二区国产| 亚洲欧美另类小说视频| 116极品美女午夜一级| 9999在线精品视频| 亚洲精品网站在线播放gif| 午夜激情福利网| 翔田千里一区二区| 亚洲影影院av| 高清av电影在线观看| 亚洲综合免费观看高清在线观看 | 日韩精品福利网| 99电影网电视剧在线观看| 国模精品一区二区| 亚洲一区二区三区影院| 另类小说第一页| 精品网站aaa| 日韩在线观看免费全| www.国产高清| 盗摄精品av一区二区三区| 无遮挡亚洲一区| 国内激情视频在线观看| 91麻豆精品国产自产在线观看一区| 日本免费福利视频| 亚洲一区二区三区| 国产精品久久久久9999| 亚洲色图狠狠干| 亚洲韩国一区二区三区| 欧美一级xxxx| 欧美视频网址| 日本欧美国产在线| 欧美一区二区在线观看视频| 亚洲天堂av一区| a在线观看免费视频| 台湾色综合娱乐中文网| 欧美高清激情视频| 国产欧美第一页| 国产精品毛片久久久久久久 | 亚洲国产成人二区| 亚洲精选成人| 国产精品第二页| 亚洲 欧美 自拍偷拍| 亚洲综合视频网| 又色又爽又黄18网站| 亚洲免费二区| 91在线视频精品| 国产原创精品视频| 正在播放一区二区| 亚洲怡红院在线观看| 麻豆视频一区二区| 亚洲精品一品区二品区三品区| 日韩三级影视| 亚洲视频网站在线观看| 中文字幕高清在线免费播放| 久久久蜜桃精品| 亚洲老女人av| 欧美国产美女| 国产免费一区二区三区在线观看| jizz在线观看中文| 欧美日韩三级一区二区| 最新日韩免费视频| 久久91精品国产91久久小草| 国产福利片一区二区| 九九九九九九精品任你躁| 精品国产一区二区在线| 国产男男gay体育生白袜| 亚洲乱码精品一二三四区日韩在线 | 免费网站在线观看人| 精品欧美乱码久久久久久1区2区| 九九视频在线免费观看| a在线播放不卡| 久久久久久久久久久视频| 久久99国产成人小视频| 国产精品成久久久久三级| 午夜视频成人| 日韩亚洲欧美一区| 日韩视频免费观看高清| 久久一夜天堂av一区二区三区| 国产麻花豆剧传媒精品mv在线| 俺要去色综合狠狠| 91久久久在线| 国产资源在线观看入口av| 国产小视频91| 国产av无码专区亚洲a∨毛片| 亚洲一级二级三级在线免费观看| 欧美高清性xxxx| 日本aⅴ亚洲精品中文乱码| 国产麻豆电影在线观看| 精品久久ai| 国产精品视频一区国模私拍 | 午夜视频网站在线观看| 国产精品视频线看| 欧美一区二区在线看| 亚洲欧洲高清在线| 国产wwwwxxxx| 丁香婷婷综合激情五月色| 国产超级av在线| 日本午夜一区| 国产精品一区二区你懂得| 日韩电影免费观| 欧美成人免费观看| 日韩私人影院| 日韩一二三四区| 久久久精品毛片| 亚洲综合一二区| 男女男精品视频网站| 不卡av免费在线观看| 一道本视频在线观看| 影音先锋久久资源网| 久久精品国产美女| 精品一区二区三区中文字幕在线| 日韩av电影手机在线| 色婷婷av在线| 中文字幕日韩在线播放| 午夜国产在线观看| 91精品国产91久久久久久最新毛片| 日本道在线观看| 亚洲精品美国一| 精品手机在线视频| 成人h动漫精品| 深爱五月综合网| 日本网站在线观看一区二区三区| 欧美男女爱爱视频| 欧美1区视频| 在线视频欧美一区| 欧美一区二区麻豆红桃视频| 精品国产乱码久久久久久蜜柚| 国产人与zoxxxx另类91| 国产精品亚洲第一区| 中文字幕在线看片| 欧美精品久久久久| 91最新在线视频| 神马久久桃色视频| 成人免费在线视频网| 亚洲伦理中文字幕| 欧性猛交ⅹxxx乱大交| 日韩欧美一级精品久久| 91尤物国产福利在线观看| 色屁屁一区二区| 欧美精品二区三区| 欧美日韩激情网| a v视频在线观看| 亚洲国产中文字幕在线视频综合| www欧美com| 亚洲三级视频在线观看| 色www亚洲国产阿娇yao| 国产精品素人视频| 欧美色图17p| 国产精品久线在线观看| 日本成人午夜影院| 国产女人aaa级久久久级| 捆绑裸体绳奴bdsm亚洲| 99久久er热在这里只有精品15| 美女网站视频在线观看| 成人午夜av在线| 怡红院一区二区| 99精品视频一区| 波多野结衣 在线| 久久久久久久久伊人| 美女爆乳18禁www久久久久久| 久久先锋影音av| 精品人伦一区二区| 国产精品护士白丝一区av| 91麻豆精品国产91久久综合| 国产精品天美传媒| 国产高清视频免费在线观看| 亚洲免费观看高清完整版在线| 黑鬼狂亚洲人videos| 亚洲一区二区精品久久av| 久久精品视频9| 日韩欧美主播在线| 狠狠狠狠狠狠狠| 欧美精品v日韩精品v韩国精品v| 99久久久久久久| 精品国产不卡一区二区三区| 无码精品一区二区三区在线| 亚洲视频免费一区| 美女羞羞视频在线观看| 欧美精品videosex极品1| 忘忧草在线影院两性视频| 国产精品久久久久999| 国产精品亚洲四区在线观看| 国产高清在线一区| 亚洲激情播播| 中文网丁香综合网| 亚洲国产专区校园欧美| 日本精品免费在线观看| 日本女人一区二区三区| 天天爽夜夜爽视频| 91丨九色丨国产丨porny| 一级二级黄色片| 亚洲国产综合人成综合网站| 波多野结衣mp4| 欧美一二三在线| 久久久久久青草| 欧美剧在线观看| 欧美黑人粗大| 69174成人网| 欧洲福利电影| av无码久久久久久不卡网站| 久久一区二区三区四区五区| 久久精品久久99| 久久久久高清精品| 天天看片中文字幕| 欧美在线观看18| 欧美一区二不卡视频| 久久精品国产免费观看| 蜜桃在线视频| 不卡视频一区二区| 成人免费在线播放| 阿v天堂2017| 国产在线视频精品一区| 成人免费网站黄| 亚洲国产另类av| 国产精品欧美久久久久天天影视| 日韩激情视频在线| 神马午夜伦理不卡| 国产综合久久久久| 国产精品嫩模av在线| 久久久性生活视频| 国产一区二区三区四区五区入口 | 国产欧美一区视频| 日本三级中文字幕| 91精品国产麻豆| av在线电影免费观看| 欧美最猛性xxxxx免费| 99香蕉久久| 国产一区二区三区在线免费| 捆绑调教美女网站视频一区| 91成年人网站| 欧美性xxxx18| 日韩大片b站免费观看直播| 欧美疯狂做受xxxx高潮| 欧美另类中文字幕| 欧美一级免费在线观看| 青椒成人免费视频| 天天躁日日躁aaaa视频| 午夜成人免费视频| 六月丁香综合网| 欧美国产日韩免费| 香蕉免费一区二区三区在线观看 | 成人在线观看av| 午夜精品久久99蜜桃的功能介绍| 国产精品自在自线| 国产精品久久久久久久久免费相片 | 狠久久av成人天堂| 无码人妻少妇色欲av一区二区| 中文字幕一区二区三区精华液 | 日韩精品成人在线| 精品国产一区二区三区av性色| 在线heyzo| 999精品视频一区二区三区| 一区二区三区在线电影| 亚洲18在线看污www麻豆| 国产精品福利一区| 一区二区国产欧美| 久久视频这里只有精品| 免费看一区二区三区| 国产成人免费高清视频| 国产成人精品三级| 久久国产精品波多野结衣av| 欧美精品一区视频| 久草在线资源福利站| 蜜桃999成人看片在线观看| 久久青草久久| 免费在线观看a视频| 欧美日韩精品三区| av网址在线播放| 国产伦精品一区二区三区免费视频 | 国产欧美精品一区| 91国在线视频| 欧美精品在线网站| 欧美日韩大片免费观看| 国语对白做受xxxxx在线中国| 国产精品污网站| 国产免费视频一区二区三区| 欧美激情一二三| 九一国产精品| www.欧美激情.com| 亚洲18色成人| 国产区在线视频| 亚洲一区二区三区乱码aⅴ蜜桃女| 综合一区在线| 三级黄色片网站| 欧美色中文字幕| 91福利区在线观看| 午夜精品美女久久久久av福利| 国产一区二区毛片| 国产微拍精品一区| 日韩一级裸体免费视频| 一区视频网站| 日本成人黄色网| 亚洲在线视频一区| 成人在线视频成人| yellow视频在线观看一区二区| 亚洲中字在线| 放荡的美妇在线播放| 日韩精品免费在线视频观看| www欧美在线观看| 国产亚洲天堂网| 依依成人综合视频| 亚洲区小说区图片区| 96pao国产成视频永久免费|