BFS應用題 Find Largest Value in Each Tree Row Leetcode #515

更新於 發佈於 閱讀時間約 3 分鐘

這題的題目在這裡:

題目敘述

題目會給我們一顆二元樹的根結點,要求我們找出每一層最大的節點值。


測試範例

Example 1:

raw-image
Input: root = [1,3,2,5,3,null,9]
Output: [1,3,9]

Example 2:

Input: root = [1,2,3]
Output: [1,3]

約束條件

Constraints:

  • The number of nodes in the tree will be in the range [0, 104].
  • -231 <= Node.val <= 231 - 1

演算法

題目要求找出每一層的節點最大值,聯想到逐層探索level order traversal,也可以說以root根結點為起始點拜訪的BFS廣度優先探索

從根結點開始,當作第一層,紀錄當下這一層的最大值,接著逐層往下拜訪。

沿途蒐集到的最大節點值,就是最終答案,也是題目所求。


程式碼

from collections import deque

class Solution:
 def largestValues(self, root: TreeNode) -> List[int]:
  
  
  if not root:
   return []
  
  traversal_queue = deque([root])
  
  max_list = []
  
  # Launch level-order traversal
  while traversal_queue:
  
   next_queue = deque([])
   max_val = float('-inf')
   
   for cur in traversal_queue:
    
    # update max node value of current level
    max_val = max( max_val, cur.val )
   
    if cur.left:
     next_queue.append( cur.left )
     
    if cur.right:
     next_queue.append( cur.right )
   
   max_list.append( max_val )
   
# update traversal queue for next level
   traversal_queue = next_queue
  
  return max_list

複雜度分析

時間複雜度: O( n)
拜訪整棵樹耗費O(n),每個節點拜訪一次。

空間複雜度: O(n)
BFS拜訪所用到的Queue,佔用空間最多也為O(n)


關鍵知識點

拜訪二元樹,在配合題目的要求一起看: 找出每一層的最大節點值,就想到經典的BFS模板,在二元樹中就是level order traversal。

強烈建議,同步複習高度關聯的應用題,鞏固二元樹+BFS拜訪的知識點。
Level order traversal I, Level order traversal II


Reference:

[1] Python O(n) by level-order traversal. 78%+ [w/ Hint] - Find Largest Value in Each Tree Row - LeetCode

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目會給我們節點總數目n、左子樹的關係陣列、右子樹的關係陣列,要求我們驗證在給定的條件下,能不能構成一顆合法的二元樹。
題目會給我們兩條已經從小到大排序好的串列,要求我們依照從小到大的順序,合併這兩條串列。
題目的輸入會給我們一個串列,要求我們從頭到尾反轉整個串列。 例子: 如果輸入是1 -> 2 -> 3,那麼輸出就是 3 -> 2 -> 1
題目會給定給我們一顆二元樹的根結點, 要求我們輸出上下顛倒的Level-order traversal的拜訪結果。
題目會給我們一顆二元樹的根節點, 要求我們對齊根節點正中央的虛擬分割線,反轉整顆二元樹。
題目會給定一顆二元樹的根結點,要求我們驗證這一顆樹是否為合法的二元搜索樹, 也就是所謂的Binary search tree, aka BST?
題目會給我們節點總數目n、左子樹的關係陣列、右子樹的關係陣列,要求我們驗證在給定的條件下,能不能構成一顆合法的二元樹。
題目會給我們兩條已經從小到大排序好的串列,要求我們依照從小到大的順序,合併這兩條串列。
題目的輸入會給我們一個串列,要求我們從頭到尾反轉整個串列。 例子: 如果輸入是1 -> 2 -> 3,那麼輸出就是 3 -> 2 -> 1
題目會給定給我們一顆二元樹的根結點, 要求我們輸出上下顛倒的Level-order traversal的拜訪結果。
題目會給我們一顆二元樹的根節點, 要求我們對齊根節點正中央的虛擬分割線,反轉整顆二元樹。
題目會給定一顆二元樹的根結點,要求我們驗證這一顆樹是否為合法的二元搜索樹, 也就是所謂的Binary search tree, aka BST?
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
前言 如文章的封面圖片1/2~1/27總共有幾天呢? 如果你的答案是25天,那務必把這個日期的地雷搞懂 種樹問題計算 題目 一條路有50公尺,每10公尺種一棵樹,請問總共種了幾顆樹? 這時就會直覺,阿不就是50/10=5,總共種了5顆樹!! 但其實大錯特錯哦❌
Thumbnail
分享在網路上看到的陣列題目。通常 for...of 的 value 是陣列中的每個值,那如果我們在迭代中對陣列操作會發生什麼事? 題目來源:https://x.com/_jayphelps/status/1774640511158022335?s=20
Thumbnail
Node 對我來說一直是很似懂非懂的概念,因為沒有實際可見的數字或字串實物可以觀察中間步驟,比起其他解題抽象許多。以下解題方法來自網友與 GPT 提供的答案,我想在本文中嘗試自己做視覺化圖解,說明 CodeWars - Can you get the loop ? 的解題思路。
Thumbnail
最難考題「創意的頭部型態」,收盤 13:30 收件 為破解長期「Allmoneyrise」投資群組散佈不實投資觀念與股價訊息,本題目獎金加碼,鼓勵蛙友踴躍作答 第一名一位,獎金7-11禮券500元,第二名三位,獎金7-11禮券300元,佳作七名,獎金7-11禮券200元 這題陷阱處處,提醒小心
Thumbnail
題目 : 28. Find the Index of the First Occurrence in a String
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
前言 如文章的封面圖片1/2~1/27總共有幾天呢? 如果你的答案是25天,那務必把這個日期的地雷搞懂 種樹問題計算 題目 一條路有50公尺,每10公尺種一棵樹,請問總共種了幾顆樹? 這時就會直覺,阿不就是50/10=5,總共種了5顆樹!! 但其實大錯特錯哦❌
Thumbnail
分享在網路上看到的陣列題目。通常 for...of 的 value 是陣列中的每個值,那如果我們在迭代中對陣列操作會發生什麼事? 題目來源:https://x.com/_jayphelps/status/1774640511158022335?s=20
Thumbnail
Node 對我來說一直是很似懂非懂的概念,因為沒有實際可見的數字或字串實物可以觀察中間步驟,比起其他解題抽象許多。以下解題方法來自網友與 GPT 提供的答案,我想在本文中嘗試自己做視覺化圖解,說明 CodeWars - Can you get the loop ? 的解題思路。
Thumbnail
最難考題「創意的頭部型態」,收盤 13:30 收件 為破解長期「Allmoneyrise」投資群組散佈不實投資觀念與股價訊息,本題目獎金加碼,鼓勵蛙友踴躍作答 第一名一位,獎金7-11禮券500元,第二名三位,獎金7-11禮券300元,佳作七名,獎金7-11禮券200元 這題陷阱處處,提醒小心
Thumbnail
題目 : 28. Find the Index of the First Occurrence in a String