題目
思路
- 樹的問題會先從遞迴來想比較直觀,首先找出最小可重複動作來作為 recursive case
- 先假設我們可以用題目給的 method 直接當作遞迴的函式,也就是說我們遞迴函式的回傳,是 preorder 排序的 node values
- 最小可重複動作:對於我這個 node 來說,回傳 preordered values
1 | def preorder(self, root: 'Node') -> List[int]: |
假如用迭代的方式來解呢?
- 用 stack, 把要處理的放入,迴圈內每次都拿一個出來,做
最小可重複動作,做到 stack 沒東西為止 - 注意在放入
child的時候這邊是用 reverse order 來放,因為我到時候拿出來的時候想用.pop()(O(1) 時間複雜度) 而不是.pop(0)(O(n) 時間複雜度)
1 | def preorder(self, root: 'Node') -> List[int]: |