BFS 經典入門題 Binary Tree Level Order Traversal II Leetcode #107

閱讀時間約 4 分鐘
raw-image

這題的題目在這

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

(基本上,就是前一題的小改版。 XD)


測試範例:

Example 1:

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

Example 2:

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

Example 3:

Input: root = []
Output: []

約束條件:

Constraints:

  • The number of nodes in the tree is in the range [0, 2000].
  • -1000 <= Node.val <= 1000

演算法:

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

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

唯一的差別是,這題要求的是上下顛倒的順序

所以,我們只要套用前一題的演算法,最後把結果做反向,再輸出,就滿足題目所求。

這種演算法化簡的技巧,在演算法理論也稱之為Reduction

把一個新的問題A,映射到一個已經知道解法(演算法)的問題B,再透過已知問題B的解答反推問題A的答案


程式碼:

class Solution:
 def levelOrderBottom(self, root: Optional[TreeNode]) -> List[List[int]]:
 
  def levelOrder(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)
     if cur_node.left: traversalQ.append( cur_node.left )
     if cur_node.right: traversalQ.append( cur_node.right )


    result.append( cur_level_trace )

   return result
  
  #-----------------------------------
  
  # Reduce to Leetcode #102 Binary tree level order traversal
  
  return levelOrder(root)[::-1]

時間複雜度:

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

空間複雜度:

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


[1] Python/Java/JS/C++/Go by normal traversal // Reduction [w/Hint] — Binary Tree Level Order Traversal II — LeetCode


86會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
題目會給我們一顆二元樹的根節點, 要求我們對齊根節點正中央的虛擬分割線,反轉整顆二元樹。
這題就是經典的考排序驗算法, 不管在教科書、上機考、面試白板題都是一個很基本又滿熱門的題目。 題目會給定一個輸入陣列,要求我們實作一個排序演算法,把陣列元素從小到大排好。
題目會給定我們一個陣列,還有一個整數值x 問我們每次從陣列頭部或尾部取一個整數,最少需要幾次才能使取出的整數總和為x?
題目會給定一顆二元樹的根結點,要求我們驗證這一顆樹是否為合法的二元搜索樹, 也就是所謂的Binary search tree, aka BST?
題目會給我們一個輸入陣列,長度為n+1。 陣列裡面會有n+1個數字,數字的範圍從1到n 裡面恰好有一個數字重複出現,要求我們找出那個重複的數字。 題目要求只能使用常數空間O(1),並且限制不能修改陣列內容。
題目會給我們一顆二元樹的根節點, 要求我們對齊根節點正中央的虛擬分割線,反轉整顆二元樹。
這題就是經典的考排序驗算法, 不管在教科書、上機考、面試白板題都是一個很基本又滿熱門的題目。 題目會給定一個輸入陣列,要求我們實作一個排序演算法,把陣列元素從小到大排好。
題目會給定我們一個陣列,還有一個整數值x 問我們每次從陣列頭部或尾部取一個整數,最少需要幾次才能使取出的整數總和為x?
題目會給定一顆二元樹的根結點,要求我們驗證這一顆樹是否為合法的二元搜索樹, 也就是所謂的Binary search tree, aka BST?
題目會給我們一個輸入陣列,長度為n+1。 陣列裡面會有n+1個數字,數字的範圍從1到n 裡面恰好有一個數字重複出現,要求我們找出那個重複的數字。 題目要求只能使用常數空間O(1),並且限制不能修改陣列內容。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
定義 圖Graph: 由節點和邊所組成的一個網狀資料結構。 圖的表達方式Graph representation: 常見的有相鄰串列adjacency list或相鄰矩陣adjacency matrix。 本文以adjacenct list作為示範。 節點Vertex: 節點
Thumbnail
題目敘述 題目會給我們一個不規則排列的二維陣列,要求我們列出從起點出發,走次對角線,由左下到右上逐層拜訪的路徑。
Thumbnail
題目會給我們一個routes 陣列,裡面都是分別代表每一條公車路線所對應的公車站編號。 題目要求我們計算出,從起點站source到終點站target的最精簡公車路線搭乘次數是幾次? 也就是說,就是在最少轉乘的前提下,旅途中需要搭乘幾條公車路線?
Thumbnail
題目會給我們一顆二元樹的根結點,要求我們找出每一層最大的節點值。
Thumbnail
題目會給定給我們一顆二元樹的根結點, 要求我們輸出上下顛倒的Level-order traversal的拜訪結果。
Thumbnail
在資訊轟炸的時代,越來越難去分辨資訊的真假及評估資訊的品質,更難去辨別作者是否具備足夠知識、是否有其他意圖、推論中是否有誤等等。批判思考(critical thinking)便是一個解方,更是一個現代基本能力,這個詞對大部分的人並不陌生,但具體是什麼、如何執行,其實並沒有明確的概念。
Thumbnail
所謂經典電影,我的定義就是時隔多年仍然為人津津樂道的電影。不管是表現方式始無前例而成為經典,還是票房經典、爛到經典還是好看成經典,都值得一看。《寄生上流》是一部雅俗共賞的好電影,不只值得一看,還值得多刷。
Thumbnail
「我只是個一塌糊塗在尋找自己的女孩」 如果今天有一台消除記憶的機器,來到「忘情診所」可以將與前任不愉快的回憶都抹去,你願意洗一波回憶嗎?代價是對方從此變成陌生人,關於他的所有回憶都將消逝...。 「你可以將一個人從記憶中抹去,但要打從心底忘了對方又是另外一回事。」
作為輕奢品牌之一,Coach,總是叫女人們無法抗拒的存在。本次試用的Coach餃子包,與貝殼、殺手、TOTE並稱Coach傢四小花旦。經典的老花帆佈搭配皮質包帶,包包長22CM,高18CM,厚6.5CM,整體小巧玲瓏,款式簡潔大方,是色差搭配柔和協調,是非常適合春夏的一款包包。   包包面料是Coa
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
定義 圖Graph: 由節點和邊所組成的一個網狀資料結構。 圖的表達方式Graph representation: 常見的有相鄰串列adjacency list或相鄰矩陣adjacency matrix。 本文以adjacenct list作為示範。 節點Vertex: 節點
Thumbnail
題目敘述 題目會給我們一個不規則排列的二維陣列,要求我們列出從起點出發,走次對角線,由左下到右上逐層拜訪的路徑。
Thumbnail
題目會給我們一個routes 陣列,裡面都是分別代表每一條公車路線所對應的公車站編號。 題目要求我們計算出,從起點站source到終點站target的最精簡公車路線搭乘次數是幾次? 也就是說,就是在最少轉乘的前提下,旅途中需要搭乘幾條公車路線?
Thumbnail
題目會給我們一顆二元樹的根結點,要求我們找出每一層最大的節點值。
Thumbnail
題目會給定給我們一顆二元樹的根結點, 要求我們輸出上下顛倒的Level-order traversal的拜訪結果。
Thumbnail
在資訊轟炸的時代,越來越難去分辨資訊的真假及評估資訊的品質,更難去辨別作者是否具備足夠知識、是否有其他意圖、推論中是否有誤等等。批判思考(critical thinking)便是一個解方,更是一個現代基本能力,這個詞對大部分的人並不陌生,但具體是什麼、如何執行,其實並沒有明確的概念。
Thumbnail
所謂經典電影,我的定義就是時隔多年仍然為人津津樂道的電影。不管是表現方式始無前例而成為經典,還是票房經典、爛到經典還是好看成經典,都值得一看。《寄生上流》是一部雅俗共賞的好電影,不只值得一看,還值得多刷。
Thumbnail
「我只是個一塌糊塗在尋找自己的女孩」 如果今天有一台消除記憶的機器,來到「忘情診所」可以將與前任不愉快的回憶都抹去,你願意洗一波回憶嗎?代價是對方從此變成陌生人,關於他的所有回憶都將消逝...。 「你可以將一個人從記憶中抹去,但要打從心底忘了對方又是另外一回事。」
作為輕奢品牌之一,Coach,總是叫女人們無法抗拒的存在。本次試用的Coach餃子包,與貝殼、殺手、TOTE並稱Coach傢四小花旦。經典的老花帆佈搭配皮質包帶,包包長22CM,高18CM,厚6.5CM,整體小巧玲瓏,款式簡潔大方,是色差搭配柔和協調,是非常適合春夏的一款包包。   包包面料是Coa