使用DFS 模板 + 基礎圖論題目 Binary Tree Paths Leetcode #257

閱讀時間約 3 分鐘
raw-image

題目敘述:  Binary Tree Paths


題目會給定一顆樹,
要求我們輸出所有從Root node根節點 到 Leaf node 葉子節點的路徑



測試範例

Example 1:

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

Example 2:

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



約束條件

Constraints:

  • The number of nodes in the tree is in the range [1, 100].
  • -100 <= Node.val <= 100

演算法


如同在這篇演算法DFS/BFS筆記所提到的,
 展開整個搜索空間(Search space/State space)的題目,
常常結合回溯法backtracking一起使用,那最適合的就是DFS深度優先演算法了。


raw-image

再次複習、回憶 深度優先+回溯法的模板 DFS template + backtracking:

def dfs(parameter):
 
 # 終止條件 Stop condition
 if stop condition:

  # update final result if needed
  return result
 

 # 通則 General cases
 for each possilbe next selection:

  make a selection
  dfs(updated parameter)
  undo selection

 return result

比較簡潔地講,所有從根節點到葉子節點的路徑,都可以抽象表達為

Root -> 左子樹路徑 , 或者

Root -> 右子樹路徑 這兩種形式。


程式碼

class Solution:
  def binaryTreePaths(self, root: TreeNode) -> List[str]:

   path = []
  
   ## base case: empty tree
   if not root:
    return path
  
   ## base case: leaf node
   if not root.left and not root.right:
    path.append( f"{root.val}" )
    return path
  
   ## General cases:
  
   for leftPath in self.binaryTreePaths(root.left):
    path.append( f"{root.val}->{leftPath}")
    
   for rightPath in self.binaryTreePaths(root.right):
    path.append( f"{root.val}->{rightPath}")
    
   return path



複雜度分析

時間複雜度O( n² )

總共O(n)個節點,每個節點至多拜訪一次,每個節點需要拷貝和更新當下的路徑,耗費O(n)

空間複雜度:O( n² )

總共O(n)個節點,遞迴深度最深為O(n),每一層遞迴需要拷貝和更新當下的路徑,耗費O(n)


Reference

[1] Python/JS/Java/C++ by self-recursion [+ Comment] — Binary Tree Paths — LeetCode

82會員
418Content count
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
Leetcode #101 Symmetric Tree 題目會給定一顆樹,要求我們判定這棵樹是不是左右鏡像對稱(Symmetric)。
圖論常用的演算法BFS 與 DFS 的統整與比較。 介紹常用且相關的底層資料結構 並且,介紹幾個適合使用的應用領域、解題分類。
Leetcode #100: Same Tree 題目會給定兩棵Binary Tree的根結點,要求我們判斷兩棵樹是否一模一樣。 也就是說,形狀相同,節點的數值也相同。
進階圖論題目: 計算最短的一筆畫路徑長 題目會給定我們一張圖和對應的相鄰矩陣,要求我們返回一筆畫拜訪所有節點的最短路徑長,起終點不拘。
Coin Change + DP 策略_Leetcode 面試題 上機考 題目 詳細解說
Leetcode #101 Symmetric Tree 題目會給定一顆樹,要求我們判定這棵樹是不是左右鏡像對稱(Symmetric)。
圖論常用的演算法BFS 與 DFS 的統整與比較。 介紹常用且相關的底層資料結構 並且,介紹幾個適合使用的應用領域、解題分類。
Leetcode #100: Same Tree 題目會給定兩棵Binary Tree的根結點,要求我們判斷兩棵樹是否一模一樣。 也就是說,形狀相同,節點的數值也相同。
進階圖論題目: 計算最短的一筆畫路徑長 題目會給定我們一張圖和對應的相鄰矩陣,要求我們返回一筆畫拜訪所有節點的最短路徑長,起終點不拘。
Coin Change + DP 策略_Leetcode 面試題 上機考 題目 詳細解說
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
在這篇文章中,我想和大家分享實用的工作流程自動化工具:Make.com,如何將它實作應用於臉書粉絲專業發文上。
在現代網站中,HTTPS(HTTP Secure)已成為保護用戶資料和確保網站安全的重要標準。使用 Let's Encrypt 免費的 SSL 憑證,結合 Nginx 網頁伺服器,我們可以快速將網站配置為 HTTPS,並自動將 HTTP 流量重定向到 HTTPS。本教程將介紹如何安裝 Nginx
Thumbnail
howler.js是一個強大的 JavaScript 音效庫,可以方便地在網頁上播放音效。 在 Vue.js 中使用 Howler.js 可以輕鬆地管理和播放音效。
Thumbnail
如同迴歸一樣,跑多層次分析時同樣也會可能檢定交互作用,當交互作用顯著時,我們習慣透過簡單斜率和交互作用圖來做進一步檢視。本文將介紹如何使用R語言做多層次模型的簡單斜率和交互作用圖。因為是第一次教學,所以先說比較容易懂的類別調節變項和連續自變項的交互作用。
月經褲到底的好不好用?月經褲帶來的經期體驗有什麼轉變?一件近千元的月經褲到底值不值得買?用完怎麼洗?跟一般常見的棉條、衛生棉比起來,月經褲有什麼不可取代的優點?全部用親身經驗分享給妳!
Thumbnail
粉絲提問需求 儲存格中這一段字串:baseccy=usd,baseccyamoun=1300,type=short} 要如何把字串中1300的數字給抓出來,其實方式蠻多的,今天來介紹3種方式 第一種剖析法: 先將資料選取出來之後利用資料剖析,因為資料的規則數字是在=之後與逗號之前,所以可以先將逗號剖
Thumbnail
提詞自由寫作(Prompted Freewriting) 是一種創新的寫作方法,以模板和提示來引導我們展開想像,激發寫作創意! 嘗試提詞自由寫作4個月後,我獲得了以下3大收穫: 收穫1 - 快速點燃內心的想像力:透過自己寫過的筆記、發表的文章,以及欣賞他人的佳作,作為寫作的提示,讓我在寫作過程中不斷
Thumbnail
簡介 「Real-ESRGAN」是一個非常方便的影像處理工具,它可以讓你把小圖片無損地放大成大圖片。 如果你曾經在網絡上搜索圖片,你可能會發現很多圖片都是很小的,而且放大後會變得模糊不清。這時候,你可以使用「Real-ESRGAN」來幫助你解決這個問題。 這個專案是由騰訊 ARC Lab 團隊開源的
Thumbnail
長時間接觸3C產品有逐漸年輕化及普遍化的趨勢,3C產品所帶來的健康危害,是不容忽視的課題。過度近距離長時間使用3C產品,眼睛不自覺用力,易導致眼軸拉長及近視度數快速加深,嚴重時會導致黃斑部傷害,增加視網膜剝離及失明的風險!
Thumbnail
一起來看,兩位臨床心理師,開箱使用「印花樂X周慕姿心理師《口袋裡的心理師》自我對話牌卡組」的體驗心得。
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
在這篇文章中,我想和大家分享實用的工作流程自動化工具:Make.com,如何將它實作應用於臉書粉絲專業發文上。
在現代網站中,HTTPS(HTTP Secure)已成為保護用戶資料和確保網站安全的重要標準。使用 Let's Encrypt 免費的 SSL 憑證,結合 Nginx 網頁伺服器,我們可以快速將網站配置為 HTTPS,並自動將 HTTP 流量重定向到 HTTPS。本教程將介紹如何安裝 Nginx
Thumbnail
howler.js是一個強大的 JavaScript 音效庫,可以方便地在網頁上播放音效。 在 Vue.js 中使用 Howler.js 可以輕鬆地管理和播放音效。
Thumbnail
如同迴歸一樣,跑多層次分析時同樣也會可能檢定交互作用,當交互作用顯著時,我們習慣透過簡單斜率和交互作用圖來做進一步檢視。本文將介紹如何使用R語言做多層次模型的簡單斜率和交互作用圖。因為是第一次教學,所以先說比較容易懂的類別調節變項和連續自變項的交互作用。
月經褲到底的好不好用?月經褲帶來的經期體驗有什麼轉變?一件近千元的月經褲到底值不值得買?用完怎麼洗?跟一般常見的棉條、衛生棉比起來,月經褲有什麼不可取代的優點?全部用親身經驗分享給妳!
Thumbnail
粉絲提問需求 儲存格中這一段字串:baseccy=usd,baseccyamoun=1300,type=short} 要如何把字串中1300的數字給抓出來,其實方式蠻多的,今天來介紹3種方式 第一種剖析法: 先將資料選取出來之後利用資料剖析,因為資料的規則數字是在=之後與逗號之前,所以可以先將逗號剖
Thumbnail
提詞自由寫作(Prompted Freewriting) 是一種創新的寫作方法,以模板和提示來引導我們展開想像,激發寫作創意! 嘗試提詞自由寫作4個月後,我獲得了以下3大收穫: 收穫1 - 快速點燃內心的想像力:透過自己寫過的筆記、發表的文章,以及欣賞他人的佳作,作為寫作的提示,讓我在寫作過程中不斷
Thumbnail
簡介 「Real-ESRGAN」是一個非常方便的影像處理工具,它可以讓你把小圖片無損地放大成大圖片。 如果你曾經在網絡上搜索圖片,你可能會發現很多圖片都是很小的,而且放大後會變得模糊不清。這時候,你可以使用「Real-ESRGAN」來幫助你解決這個問題。 這個專案是由騰訊 ARC Lab 團隊開源的
Thumbnail
長時間接觸3C產品有逐漸年輕化及普遍化的趨勢,3C產品所帶來的健康危害,是不容忽視的課題。過度近距離長時間使用3C產品,眼睛不自覺用力,易導致眼軸拉長及近視度數快速加深,嚴重時會導致黃斑部傷害,增加視網膜剝離及失明的風險!
Thumbnail
一起來看,兩位臨床心理師,開箱使用「印花樂X周慕姿心理師《口袋裡的心理師》自我對話牌卡組」的體驗心得。