Populating next right pointers in each node
link
"""
# Definition for a Node.
class Node:
def __init__(self, val: int = 0, left: 'Node' = None, right: 'Node' = None, next: 'Node' = None):
self.val = val
self.left = left
self.right = right
self.next = next
"""
class Solution:
def connect(self, root: 'Optional[Node]') -> 'Optional[Node]':
# if not root or not root.left or not root.right: return root
# ret = root
# while ret.left:
# head = ret.left
# while ret:
# ret.left.next = ret.right
# if ret.next:
# ret.right.next = ret.next.left
# ret = ret.next
# ret = head
# return root
def moveNext(nodes):
head = nodes[0]
for node in nodes[1:]:
head.next = node
head = node
def bfs(node):
queue = [node]
while queue:
moveNext(queue)
new_queue = []
for cur_node in queue:
for tmp_node in [cur_node.left, cur_node.right]:
if tmp_node:
new_queue.append(tmp_node)
queue = new_queue
if root:
bfs(root)
return root