Leetcode # 116. Populating Next Right Pointers in Each Node
- 2021.12.29
- LeetCode
https://leetcode.com/problems/populating-next-right-pointers-in-each-node/
Solution
使用BFS,使上層的 node 得以被優先處理
如果 cur.next 存在 ⇒ 說明 cur 同一層中還有右節點
⇒ cur.right.next = cur.next.left
class Solution: def connect(self, root: 'Optional[Node]') -> 'Optional[Node]': if root is None: return root queue = collections.deque([root]) while queue: cur = queue.popleft() if cur.left is not None: cur.left.next = cur.right queue.append(cur.left) queue.append(cur.right) if cur.next is not None: cur.right.next = cur.next.left return root
Refined Solution
使用一縱一橫的 pointer 取代 BFS
能使得 space complexity 從 O(n) 縮減至 O(1)
class Solution: def connect(self, root: 'Optional[Node]') -> 'Optional[Node]': layer_start = root while layer_start: cur = layer_start while cur: if cur.left is not None: cur.left.next = cur.right if cur.next is not None: cur.right.next = cur.next.left cur = cur.next layer_start = layer_start.left return root
Last Updated on 2023/08/16 by A1go