116. Populating Next Right Pointers in Each Node
解法が面白かったので
なんとなく、 階層ごとにqueue用意して、終わったら次の階層へって感じかと思ったけど、綺麗な実装が思いつかんかった
解法見たら、1つのQueueでうまいことやってたので
2分木系で階層意識するの応用できそうなので、整理のために描いてみる
code: solution.py
class Solution:
def connect(self, root: 'Node') -> 'Node':
# 例外処理、0node
if not root:
return root
# qの宣言
q = collections.deque(root) # queueが空になるまでループ
while q:
# 現在のqueueのサイズ = この階層のノード数
size = len(q)
# この階層分の処理をする
for i in range(size):
# popする
node = q.popleft()
# 一番右端のノード以外はつなげていく
# Queueの左から右にその階層のノードが左から右順で入ってる
if i < size - 1:
# 次の階層分のデータをqueueに突っ込んでいく
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
return root
queueの使い方が上手い、BFS的にqueueに突っ込んでるので、その階層に溜まってるnodeを全てpopした直後のqueueのsizeはその階層のノード数になってる
そのsize数で2重ループ的にしていくと、階層ごとの処理ができる