iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0
自我挑戰組

Leetcode 自學系列 第 11

自學Leetcode Day11

  • 分享至 

  • xImage
  •  

144. Binary Tree Preorder Traversal

  1. 前序遍歷定義:
    遍歷順序為:
    1. 根節點 (Root)
    2. 左子樹 (Left)
    3. 右子樹 (Right)
      2.解題思路
      方式一:遞迴(Recursive):最直覺的做法就是使用遞迴呼叫自己完成遍歷,因為樹的結構本身就是遞迴性質(每個子樹本身就是一棵樹)。
      優點:簡潔易懂
      缺點:當樹很深時容易 Stack Overflow
      方式二:非遞迴(Iterative,用 Stack 模擬):因為遞迴本質上使用的是「函式堆疊(call stack)」,我們可以自己用一個 Stack 資料結構 來模擬整個流程。(此提採用非遞迴方式來解)
      遍歷流程:
      1.建立一個空的 Stack。
      2.將根節點 root 推入 stack。
      3.當 stack 非空時,進入迴圈:
    • 從 stack 彈出頂部節點 node。
    • 把 node.val 加入結果清單。
    • 先推入 node.right,再推入 node.left。
      因為 Stack是後進先出(LIFO),所以右子樹會後處理,左子樹會先處理,這樣就符合 Preorder 的順序。
      優點:無遞迴限制
      缺點:稍微複雜一些
      3.簡單範例解析
      輸入:
      https://ithelp.ithome.com.tw/upload/images/20250925/20169241J6gFMi6q4I.png
      前序遍歷步驟如下:
      1.先訪問 1
      2.沒有左子樹,訪問右子樹 2
      3.再訪問 2 的左子樹 3
      輸出結果:[1, 2, 3]
      4.程式碼截圖:https://ithelp.ithome.com.tw/upload/images/20250924/20169241bGwyQZthJ7.png
      5.此次選的題目我覺得比較簡單,思路其實有先自己想過一遍才去找答案,跟我想的都蠻符合的,只是在程式碼的用法還是有不足的地方,但這次還是有比前一次進步許多。

上一篇
自學Leetcode Day10
系列文
Leetcode 自學11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言