144. Binary Tree Preorder Traversal
- 前序遍歷定義:
遍歷順序為:
- 根節點 (Root)
- 左子樹 (Left)
- 右子樹 (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.簡單範例解析
輸入:

前序遍歷步驟如下:
1.先訪問 1
2.沒有左子樹,訪問右子樹 2
3.再訪問 2 的左子樹 3
輸出結果:[1, 2, 3]
4.程式碼截圖:
5.此次選的題目我覺得比較簡單,思路其實有先自己想過一遍才去找答案,跟我想的都蠻符合的,只是在程式碼的用法還是有不足的地方,但這次還是有比前一次進步許多。