前往
大廳
主題

LeetCode - 590. N-ary Tree Postorder Traversal 解題心得

Not In My Back Yard | 2020-12-01 00:00:03 | 巴幣 0 | 人氣 178

題目連結:


題目意譯:
給定一棵 n 元樹,回傳這棵樹的節點值之後序探訪(Postorder Traversal)。

n 元樹輸入序列化以它的階層探訪(Level-Order Traversal)表示,每組子節點以 null 值互相隔開(參見範例)。

進階:
遞迴解顯而易見,那你能使用迭代法做出來嗎?

限制:
n 元樹的高度 ≦ 1000
節點總數介於 [0, 10 ^ 4] 之間



範例測資:
範例 1:
輸入: root = [1,null,3,2,4,null,5,6]
輸出: [5,6,3,2,4,1]

範例 2:
輸入: root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
輸出: [2,6,14,11,7,3,12,8,4,13,9,10,5,1]


解題思維:
這題有提及二元樹的後序探訪為:
左子樹 → 右子樹 → 根節點
而 n 元樹的則變更為
最左邊的子樹 → …… → 最右邊的子樹 → 根節點
因此直接仿照二元樹的版本即可,先從左到右依序遞迴每個子樹再看根節點。



而迭代的版本就是從根節點開始,而我們使用一個堆疊(Stack)儲存每個節點的子樹,但是要從右至左地將子節點放入堆疊之中。這樣從中移出元素時就會是盡量最左邊的子樹,才符合探訪的定義。

每移出一個元素就對應著原本遞迴子樹時的新根節點,而所有的子樹的根節點都會做一樣的事情。因此堆疊會一直增增減減,但是最後一定會變成空的。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作