↓快轉到主要內容
  1. LeetCode/

LeetCode 590: N-ary Tree Postorder Traversal

·1 分鐘· ·
LeetCode Easy Stack Tree Depth-First-Search
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2022-08-27

  • 提交紀錄:Runtime Error → Accepted ×5

解題思路
#

後序是先依序處理每個小孩、最後才是自己(Tree)。迭代的小技巧:「根、最後一個小孩、……、第一個小孩」的順序反轉過來,剛好就是後序。所以用 stack 彈出就記錄、小孩照順序推進去,最後反轉。

我的嘗試
#

第一版用了沒定義的變數;之後都是遞迴寫法,一次就過了。

正確解法
#

class Solution:
    def postorder(self, root: 'Node') -> List[int]:
        res, stack = [], [root] if root else []
        while stack:
            node = stack.pop()
            res.append(node.val)
            stack.extend(node.children)
        return res[::-1]

複雜度
#

時間 O(n),空間 O(n)。

要特別避免的錯誤
#

  • 反轉技巧的前提是小孩照原本的順序推進 stack。

面試口說整理
#

後序反過來看是「根、最後一個小孩到第一個小孩」,所以我用 stack 做這個順序的遍歷,最後把結果反轉。時間 O(n)。

相關文章

LeetCode 589: N-ary Tree Preorder Traversal
·1 分鐘
LeetCode Easy Stack Tree Depth-First-Search
LeetCode 589 解題筆記:N 叉樹的前序,先記錄自己,再依序處理每個小孩;遞迴結果要用 extend 攤平,不是 append 一個 list
LeetCode 145: Binary Tree Postorder Traversal
·1 分鐘
LeetCode Easy Stack Tree Depth-First-Search Binary-Tree
LeetCode 145 解題筆記:迭代的後序遍歷,節點第一次彈出時標記後放回去,再依序推右、左小孩;第二次彈出才記錄
LeetCode 144: Binary Tree Preorder Traversal
·1 分鐘
LeetCode Easy Stack Tree Depth-First-Search Binary-Tree
LeetCode 144 解題筆記:迭代的前序遍歷,彈出就記錄,先推右小孩再推左小孩,左邊才會先處理
LeetCode 94: Binary Tree Inorder Traversal
·1 分鐘
LeetCode Easy Stack Tree Depth-First-Search Binary-Tree
LeetCode 94 解題筆記:迭代的中序遍歷,一路往左把節點推進 stack,彈出時記錄,再轉向右子樹
LeetCode 559: Maximum Depth of N-ary Tree
·1 分鐘
LeetCode Easy Tree Depth-First-Search Breadth-First-Search
LeetCode 559 解題筆記:深度等於 1 加上所有小孩深度的最大值;沒有小孩時是 1
LeetCode 563: Binary Tree Tilt
·1 分鐘
LeetCode Easy Tree Depth-First-Search Binary-Tree Dp-on-Trees
LeetCode 563 解題筆記:後序回傳子樹的總和,每個節點的 tilt 是左右子樹總和的差,加進答案