File tree Expand file tree Collapse file tree 2 files changed +43
-0
lines changed
145-Binary Tree Postorder Traversal Expand file tree Collapse file tree 2 files changed +43
-0
lines changed Original file line number Diff line number Diff line change
1
+ # 145. Binary Tree Postorder Traversal
2
+
3
+ Given the root of a binary tree, return the postorder traversal of its nodes' values.
4
+
5
+ ## 基礎思路
6
+ 這題是經典的 Tree Traversal 題目,我們可以使用遞迴的方式來解決這個問題。
7
+ 遞迴的方式依序遍歷左子樹結果、右子樹結果,最後再加上根節點 (也可是子樹的"根"節點)。
8
+
9
+ ## 解題步驟
10
+
11
+ ### Step 1: 直接返回遞迴結果
12
+
13
+ ``` typescript
14
+ return root ? [... postorderTraversal (root .left ), ... postorderTraversal (root .right ), root .val ] : []
15
+ ```
16
+ 須注意由於 root 可能為 null,因此在遞迴的過程中,需要先判斷 root 是否為 null。(這也是遞迴的終止條件)
17
+ 然後把左子樹的結果展開,再把右子樹的結果展開,最後再加上根節點的值。
18
+
19
+ ## 時間複雜度
20
+ 每個節點都會被訪問一次,因此時間複雜度為 $O(n)$。
21
+
22
+ > $O(n)$
23
+
24
+ ## 空間複雜度
25
+ * 最壞的情況下,遞迴的深度為 $O(n)$,最好的情況下,遞迴的深度為 $O(\log n)$。
26
+ * 保存結果的空間複雜度為 $O(n)$。
27
+ * 故總體空間複雜度為 $O(n)$。
28
+
29
+ > $O(n)$
Original file line number Diff line number Diff line change
1
+ class TreeNode {
2
+ val : number
3
+ left : TreeNode | null
4
+ right : TreeNode | null
5
+ constructor ( val ?: number , left ?: TreeNode | null , right ?: TreeNode | null ) {
6
+ this . val = ( val === undefined ? 0 : val )
7
+ this . left = ( left === undefined ? null : left )
8
+ this . right = ( right === undefined ? null : right )
9
+ }
10
+ }
11
+
12
+ function postorderTraversal ( root : TreeNode | null ) : number [ ] {
13
+ return root ? [ ...postorderTraversal ( root . left ) , ...postorderTraversal ( root . right ) , root . val ] : [ ]
14
+ }
You can’t perform that action at this time.
0 commit comments