116. Populating Next Right Pointers in Each Node (Medium) - TengnanYao/daily_leetcode GitHub Wiki

"""
# 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: 'Node') -> 'Node':
        if root:
            nodes = [root]
            while nodes:
                temp = []
                n = len(nodes)
                for i in range(n):
                    node = nodes[i]
                    if i < n - 1:
                        node.next = nodes[i + 1]
                    if node.left:
                        temp.append(node.left)
                        temp.append(node.right)
                nodes = temp
            return root
        
        # save space
        if root:
            l = root
            while l.left:
                cur = l
                while cur:
                    cur.left.next = cur.right
                    if cur.next:
                        cur.right.next = cur.next.left
                    cur = cur.next
                l = l.left
        return root