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

閱讀時間約 3 分鐘
raw-image

這題題目在這裡:

題目會給定一顆樹,要求我們輸出所有從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



52會員
340內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
使用POWER QUERY輕鬆擷取儲存格中的數字粉絲提問需求 儲存格中這一段字串:baseccy=usd,baseccyamoun=1300,type=short} 要如何把字串中1300的數字給抓出來,其實方式蠻多的,今天來介紹3種方式 第一種剖析法: 先將資料選取出來之後利用資料剖析,因為資料的規則數字是在=之後與逗號之前,所以可以先將逗號剖
Thumbnail
avatar
效率職人
2023-06-28
【使用了提詞自由寫作4個月,激發了我無窮創意的3大收穫】提詞自由寫作(Prompted Freewriting) 是一種創新的寫作方法,以模板和提示來引導我們展開想像,激發寫作創意! 嘗試提詞自由寫作4個月後,我獲得了以下3大收穫: 收穫1 - 快速點燃內心的想像力:透過自己寫過的筆記、發表的文章,以及欣賞他人的佳作,作為寫作的提示,讓我在寫作過程中不斷
Thumbnail
avatar
王啟樺
2023-04-16
使用 AI 無損放大圖片!用 real-esrgan 將小圖放大至極致!簡介 「Real-ESRGAN」是一個非常方便的影像處理工具,它可以讓你把小圖片無損地放大成大圖片。 如果你曾經在網絡上搜索圖片,你可能會發現很多圖片都是很小的,而且放大後會變得模糊不清。這時候,你可以使用「Real-ESRGAN」來幫助你解決這個問題。 這個專案是由騰訊 ARC Lab 團隊開源的
Thumbnail
avatar
Bobo Chen
2023-03-06
使用3C要適度,避免眼睛受傷害,醫師圖解長時間接觸3C產品有逐漸年輕化及普遍化的趨勢,3C產品所帶來的健康危害,是不容忽視的課題。過度近距離長時間使用3C產品,眼睛不自覺用力,易導致眼軸拉長及近視度數快速加深,嚴重時會導致黃斑部傷害,增加視網膜剝離及失明的風險!
Thumbnail
avatar
照護線上
2022-07-25
使用體驗心得|印花樂X周慕姿心理師《口袋裡的心理師》自我對話牌卡組一起來看,兩位臨床心理師,開箱使用「印花樂X周慕姿心理師《口袋裡的心理師》自我對話牌卡組」的體驗心得。
Thumbnail
avatar
心理雜貨舖
2022-06-07
使用 GIFMaker.Me 網站製作 gif 動圖教學這次來用這個網站 https://gifmaker.me/ ,製作 GIF 動圖,主要是覺得把自己畫貓的過程弄成動圖時覺得很療癒... 什麼?!?你說你不會畫,沒關係,即使是畫個火柴棒人也可以很趣味的...
Thumbnail
avatar
Erica Liu
2021-10-17
使用手機,要看時機 手機帶給現代人很多方便,幾乎人手至少一機;但在使用的時候有些基本禮儀還是需要注意的。 我在診所工作,看到不少次,病人看病看一半手機響起,當下接起手機也不會跟對方說正在看病稍後聯絡,就坐在醫生前面自顧的談了起來,有些事情又不是三言兩語談完,講個沒完沒了,不管醫生無奈的等他講完再繼續看診,也不管候診
Thumbnail
avatar
風吹
2021-05-20
使用 Google 地圖製作熱點分析圖Google Data Studio 內建支援 Google 地圖作為報表的元件,如果你正在評估開設實體門市的地點,就可以考慮採用這種方式,從客戶歷史訂單的地址資料,製作潛在客戶所在之熱點圖做分析。
Thumbnail
avatar
電商工匠
2020-12-04
使用自動化機器學習(AutoML): 更準更快的數據分析 + 節省成本至傳統1/3 以電信公司離網分析 (churn rate)預測為例 既有手動資料分析的挑戰: 電信公司與上千萬個客戶簽約,因此顧客資料量龐大,難以分析 需有專業人員進行複雜的數據建模,導致人力、時間、工具成本昂貴,無法彈性擴展應用 新進人員需要時間訓練,無法快速上手 分析目的:     使用過
Thumbnail
avatar
行動貝果 MoBagel Inc.
2019-05-16