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

85會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
題目會給我們節點總數目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
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
這篇文章,會帶著大家複習以前學過的BFS框架, 並且以圖論的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 BFS 框架 + 演算法 虛擬碼 # Queue 通常初始化成根結點,作為起點 BFS_queue = deque([root])​ # 先
Thumbnail
題目敘述 給定一個正整數n,請找出最少用幾個完全平方數,可以讓他們的總和為n? 例如 n=12,最少用3個完全平方數就可讓他們的總和為n,因為12 = 4 + 4 + 4 題目的原文敘述 測試範例 Example 1: Input: n = 12 Output: 3 Explanat
Thumbnail
題目敘述 題目會給我們一個不規則排列的二維陣列,要求我們列出從起點出發,走次對角線,由左下到右上逐層拜訪的路徑。
Thumbnail
題目會給我們一個routes 陣列,裡面都是分別代表每一條公車路線所對應的公車站編號。 題目要求我們計算出,從起點站source到終點站target的最精簡公車路線搭乘次數是幾次? 也就是說,就是在最少轉乘的前提下,旅途中需要搭乘幾條公車路線?
Thumbnail
題目會給我們一顆二元樹的根結點,要求我們找出每一層最大的節點值。
Thumbnail
Android 應用程式開發的50 個提示 Android程式碼審查與優化: 程式碼審查建議:“建議對此程式碼片段進行改進:[此處的程式碼片段]。” 性能優化:“建議優化此程式碼性能的方法:[此處的程式碼片段]。” 程式碼重構建議:“推薦重構此程式碼的最佳實踐:[此處的程式碼片段]。”
昨天進行一個小考,來檢視學生學習的成效如何。發現,應用問題有「亂寫」狀況。「亂寫」,只是表示學生寫錯,不是計算錯誤那種類型,而是被除數跟除數搞錯。 心想著,除了重新檢討這個數學問題的意思之外,還有什麼是老師可以做的,來幫助學生更能理解數學。晚上睡前,就胡思亂想了起來。
Thumbnail
AI的簡介:人工智能(Artificial Intelligence,簡稱AI)已經深入我們的日常生活,改變了我們的生活方式,並為我們帶來了更多便利。這篇文章將探討人工智能在生活中的多個應用,並簡單介紹幾款具有代表性的AI應用程序,讓你更了解這項令人振奮的AI技術。
Thumbnail
隨著健康和健身意識的抬頭,健身追蹤器成為現代人日常生活中的重要裝備。這些健身設備和應用程式提供了豐富的健身數據和資訊,使得健身愛好者能夠更好地掌握自己的健康狀態和運動進程。然而,隨著競爭的日益激烈,健身追蹤器的製造商和開發者也面臨著提高可見性的挑戰。
Thumbnail
在ChatGPT橫空出世的當下😮,如何提一個好問題或是下一個好指令,成為人們的新技能🎯,但是身為老師的您,真的會問好問題嗎🤔?還有良好的提問技巧您掌握住了嗎🎓? 在課堂上,問題提問是一個重要的環節,有助於引導學生思考和參與🌟。 以下是一些常用的提問公式,以及在課堂上的應用和範例📚。
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
這篇文章,會帶著大家複習以前學過的BFS框架, 並且以圖論的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 BFS 框架 + 演算法 虛擬碼 # Queue 通常初始化成根結點,作為起點 BFS_queue = deque([root])​ # 先
Thumbnail
題目敘述 給定一個正整數n,請找出最少用幾個完全平方數,可以讓他們的總和為n? 例如 n=12,最少用3個完全平方數就可讓他們的總和為n,因為12 = 4 + 4 + 4 題目的原文敘述 測試範例 Example 1: Input: n = 12 Output: 3 Explanat
Thumbnail
題目敘述 題目會給我們一個不規則排列的二維陣列,要求我們列出從起點出發,走次對角線,由左下到右上逐層拜訪的路徑。
Thumbnail
題目會給我們一個routes 陣列,裡面都是分別代表每一條公車路線所對應的公車站編號。 題目要求我們計算出,從起點站source到終點站target的最精簡公車路線搭乘次數是幾次? 也就是說,就是在最少轉乘的前提下,旅途中需要搭乘幾條公車路線?
Thumbnail
題目會給我們一顆二元樹的根結點,要求我們找出每一層最大的節點值。
Thumbnail
Android 應用程式開發的50 個提示 Android程式碼審查與優化: 程式碼審查建議:“建議對此程式碼片段進行改進:[此處的程式碼片段]。” 性能優化:“建議優化此程式碼性能的方法:[此處的程式碼片段]。” 程式碼重構建議:“推薦重構此程式碼的最佳實踐:[此處的程式碼片段]。”
昨天進行一個小考,來檢視學生學習的成效如何。發現,應用問題有「亂寫」狀況。「亂寫」,只是表示學生寫錯,不是計算錯誤那種類型,而是被除數跟除數搞錯。 心想著,除了重新檢討這個數學問題的意思之外,還有什麼是老師可以做的,來幫助學生更能理解數學。晚上睡前,就胡思亂想了起來。
Thumbnail
AI的簡介:人工智能(Artificial Intelligence,簡稱AI)已經深入我們的日常生活,改變了我們的生活方式,並為我們帶來了更多便利。這篇文章將探討人工智能在生活中的多個應用,並簡單介紹幾款具有代表性的AI應用程序,讓你更了解這項令人振奮的AI技術。
Thumbnail
隨著健康和健身意識的抬頭,健身追蹤器成為現代人日常生活中的重要裝備。這些健身設備和應用程式提供了豐富的健身數據和資訊,使得健身愛好者能夠更好地掌握自己的健康狀態和運動進程。然而,隨著競爭的日益激烈,健身追蹤器的製造商和開發者也面臨著提高可見性的挑戰。
Thumbnail
在ChatGPT橫空出世的當下😮,如何提一個好問題或是下一個好指令,成為人們的新技能🎯,但是身為老師的您,真的會問好問題嗎🤔?還有良好的提問技巧您掌握住了嗎🎓? 在課堂上,問題提問是一個重要的環節,有助於引導學生思考和參與🌟。 以下是一些常用的提問公式,以及在課堂上的應用和範例📚。