BFS 經典入門題 Binary Tree Level Order Traversal_Leetcode #102

閱讀時間約 3 分鐘
BFS 先天具有 點波源擴散,逐層由內往外探索的特質

BFS 先天具有 點波源擴散,逐層由內往外探索的特質

題目敘述: 102. Binary Tree Level Order Traversal


題目會給定給我們一顆二元樹的根結點,
要求我們輸出Level-order traversal的拜訪結果。


測試範例

Example 1:

raw-image
Input: root = [3,9,20,null,null,15,7]
Output: [[3],[9,20],[15,7]]

Example 2:

Input: root = [1]
Output: [[1]]

Example 3:

Input: root = []
Output: []

演算法

其實這題就剛好可以套用圖論裡面的BFS廣度優先探索演算法,也呼應之前我們在圖論演算法統整介紹過的概念。

BFS在探索Tree/Binary tree相關的領域中,還有一個名字,叫做Level-order traversal 逐層探索演算法從第一層Root根接點,逐層探索到Leaf葉子節點 也是最深的那一層


複習一下常見的BFS模板:

traversalQ = [startNode]
visited = set()

while traversalQ:
 
 curNode = traversalQ.popleft()
 // do something, or print something
 visited.add( curNode ) 

 for neighbor in graph[curNode]:
  if neighbor not in visited:
   traversalQ.append( neighbor )

程式碼

把BFS廣度優先演算法具象化,實作Binary tree的Level order traversal

class Solution:
 def levelOrder(self, root: TreeNode) -> List[List[int]]:
  
  
  if not root:
   # Quick response for empty tree
   return []
  
  traversalQ, result = deque([root]), []
  
  # level order traversal
  while traversalQ:
   
   # going down level-by-level
   cur_level_trace, cur_level_len = [], len(traversalQ)

   for _ in range(cur_level_len):
    
    cur_node = traversalQ.popleft()
         
    cur_level_trace.append(cur_node.val)
    cur_node.left and traversalQ.append( cur_node.left )
    cur_node.right and traversalQ.append( cur_node.right )
   
   
   result.append( cur_level_trace )
   
  return result

複雜度分析

時間複雜度: O( n )

O( n ) 每個節點最多拜訪一次。

空間複雜度: O( n )

O( n ) 耗費在traversal ququq的空間本,

最長的那一層在最後一層,長度最長為O( n/2 )


Reference

[1] Python/JS/Java/Go/C++ O(n) by BFS [w/ Comment ] — Binary Tree Level Order Traversal — LeetCode

82會員
418Content count
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
其實常見的tree traversal (前序、中序、後序拜訪), 背後的核心觀念都是相同的。 Tree traversal其實就是探索整顆樹的搜索空間,也可以說是探索整顆樹, 只是指定順序略有不同而已。 本文將結合經典的DFS模板,做一個全面性的回顧。
題目會給定一顆樹,要求我們輸出所有從Root node根節點 到 Leaf node 葉子節點的路徑。 我們會介紹DFS模板 + Tree search演算法的框架來解題
Leetcode #101 Symmetric Tree 題目會給定一顆樹,要求我們判定這棵樹是不是左右鏡像對稱(Symmetric)。
圖論常用的演算法BFS 與 DFS 的統整與比較。 介紹常用且相關的底層資料結構 並且,介紹幾個適合使用的應用領域、解題分類。
Leetcode #100: Same Tree 題目會給定兩棵Binary Tree的根結點,要求我們判斷兩棵樹是否一模一樣。 也就是說,形狀相同,節點的數值也相同。
進階圖論題目: 計算最短的一筆畫路徑長 題目會給定我們一張圖和對應的相鄰矩陣,要求我們返回一筆畫拜訪所有節點的最短路徑長,起終點不拘。
其實常見的tree traversal (前序、中序、後序拜訪), 背後的核心觀念都是相同的。 Tree traversal其實就是探索整顆樹的搜索空間,也可以說是探索整顆樹, 只是指定順序略有不同而已。 本文將結合經典的DFS模板,做一個全面性的回顧。
題目會給定一顆樹,要求我們輸出所有從Root node根節點 到 Leaf node 葉子節點的路徑。 我們會介紹DFS模板 + Tree search演算法的框架來解題
Leetcode #101 Symmetric Tree 題目會給定一顆樹,要求我們判定這棵樹是不是左右鏡像對稱(Symmetric)。
圖論常用的演算法BFS 與 DFS 的統整與比較。 介紹常用且相關的底層資料結構 並且,介紹幾個適合使用的應用領域、解題分類。
Leetcode #100: Same Tree 題目會給定兩棵Binary Tree的根結點,要求我們判斷兩棵樹是否一模一樣。 也就是說,形狀相同,節點的數值也相同。
進階圖論題目: 計算最短的一筆畫路徑長 題目會給定我們一張圖和對應的相鄰矩陣,要求我們返回一筆畫拜訪所有節點的最短路徑長,起終點不拘。
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
題目敘述 題目會給我們一個不規則排列的二維陣列,要求我們列出從起點出發,走次對角線,由左下到右上逐層拜訪的路徑。
Thumbnail
題目會給我們一個routes 陣列,裡面都是分別代表每一條公車路線所對應的公車站編號。 題目要求我們計算出,從起點站source到終點站target的最精簡公車路線搭乘次數是幾次? 也就是說,就是在最少轉乘的前提下,旅途中需要搭乘幾條公車路線?
Thumbnail
題目會給我們一顆二元樹的根結點,要求我們找出每一層最大的節點值。
Thumbnail
題目會給定給我們一顆二元樹的根結點, 要求我們輸出上下顛倒的Level-order traversal的拜訪結果。
Thumbnail
題目會給定給我們一顆二元樹的根結點,要求我們輸出Level-order traversal的拜訪結果。 在這題,我們會複習並利用BFS模板,來實現逐層搜索演算法。
Thumbnail
在資訊轟炸的時代,越來越難去分辨資訊的真假及評估資訊的品質,更難去辨別作者是否具備足夠知識、是否有其他意圖、推論中是否有誤等等。批判思考(critical thinking)便是一個解方,更是一個現代基本能力,這個詞對大部分的人並不陌生,但具體是什麼、如何執行,其實並沒有明確的概念。
Thumbnail
所謂經典電影,我的定義就是時隔多年仍然為人津津樂道的電影。不管是表現方式始無前例而成為經典,還是票房經典、爛到經典還是好看成經典,都值得一看。《寄生上流》是一部雅俗共賞的好電影,不只值得一看,還值得多刷。
Thumbnail
「我只是個一塌糊塗在尋找自己的女孩」 如果今天有一台消除記憶的機器,來到「忘情診所」可以將與前任不愉快的回憶都抹去,你願意洗一波回憶嗎?代價是對方從此變成陌生人,關於他的所有回憶都將消逝...。 「你可以將一個人從記憶中抹去,但要打從心底忘了對方又是另外一回事。」
作為輕奢品牌之一,Coach,總是叫女人們無法抗拒的存在。本次試用的Coach餃子包,與貝殼、殺手、TOTE並稱Coach傢四小花旦。經典的老花帆佈搭配皮質包帶,包包長22CM,高18CM,厚6.5CM,整體小巧玲瓏,款式簡潔大方,是色差搭配柔和協調,是非常適合春夏的一款包包。   包包面料是Coa
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
題目敘述 題目會給我們一個不規則排列的二維陣列,要求我們列出從起點出發,走次對角線,由左下到右上逐層拜訪的路徑。
Thumbnail
題目會給我們一個routes 陣列,裡面都是分別代表每一條公車路線所對應的公車站編號。 題目要求我們計算出,從起點站source到終點站target的最精簡公車路線搭乘次數是幾次? 也就是說,就是在最少轉乘的前提下,旅途中需要搭乘幾條公車路線?
Thumbnail
題目會給我們一顆二元樹的根結點,要求我們找出每一層最大的節點值。
Thumbnail
題目會給定給我們一顆二元樹的根結點, 要求我們輸出上下顛倒的Level-order traversal的拜訪結果。
Thumbnail
題目會給定給我們一顆二元樹的根結點,要求我們輸出Level-order traversal的拜訪結果。 在這題,我們會複習並利用BFS模板,來實現逐層搜索演算法。
Thumbnail
在資訊轟炸的時代,越來越難去分辨資訊的真假及評估資訊的品質,更難去辨別作者是否具備足夠知識、是否有其他意圖、推論中是否有誤等等。批判思考(critical thinking)便是一個解方,更是一個現代基本能力,這個詞對大部分的人並不陌生,但具體是什麼、如何執行,其實並沒有明確的概念。
Thumbnail
所謂經典電影,我的定義就是時隔多年仍然為人津津樂道的電影。不管是表現方式始無前例而成為經典,還是票房經典、爛到經典還是好看成經典,都值得一看。《寄生上流》是一部雅俗共賞的好電影,不只值得一看,還值得多刷。
Thumbnail
「我只是個一塌糊塗在尋找自己的女孩」 如果今天有一台消除記憶的機器,來到「忘情診所」可以將與前任不愉快的回憶都抹去,你願意洗一波回憶嗎?代價是對方從此變成陌生人,關於他的所有回憶都將消逝...。 「你可以將一個人從記憶中抹去,但要打從心底忘了對方又是另外一回事。」
作為輕奢品牌之一,Coach,總是叫女人們無法抗拒的存在。本次試用的Coach餃子包,與貝殼、殺手、TOTE並稱Coach傢四小花旦。經典的老花帆佈搭配皮質包帶,包包長22CM,高18CM,厚6.5CM,整體小巧玲瓏,款式簡潔大方,是色差搭配柔和協調,是非常適合春夏的一款包包。   包包面料是Coa