117. Populating Next Right Pointers in Each Node II
題目網址:https://leetcode.cn/problems/populating-next-right-pointers-in-each-node-ii/
題意:給一 BT, 其中每一個 node 的定義如下:
將每個 node 的
next
指向其右邊的 node。若不存在右邊的 node, 則next
應指向NULL
。
所有next
預設皆為NULL
。進階:
- 設計 $O(1)$ space 的演算法
- 可以使用遞迴解題, 遞迴所用到的 stack space 不算做額外的 space
Solution 1:
想法:利用 BFS
class Solution { |
- time:$O(n)$ ➔ 每個 node 被遍歷一次
- space:$O(n)$ ➔ 撇除要返回的
res
, 在 while loop 迭代的過程中,q
的元素個數不超過n
Solution 2:
想法:用 iterative + pointer 的方式將 space 降到 $O(1)$
dummy
永遠指向第N + 1
的第一個 nodecur
由左至右遍歷第N
層, 而nxt
拜訪第N + 1
層 node 的前一個 node當
cur
遍歷第N
層的時候,nxt
會一邊串接起第N + 1
層的next
pointer。遍歷完第N
層的時候, 意味著第N + 1
層也已經透過next
pointer 串接起來了, 這時候cur
再往第N + 1
層移動
class Solution { |
- time:$O(n)$ ➔ 每個 node 被遍歷一次
- space:$O(1)$ ➔ 只需常數空間
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論