Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to NULL.Initially, all next pointers are set to NULL.
Input: root = [1,2,3,4,5,null,7]Output: [1,#,2,3,#,4,5,7,#]Explanation: Given the above binary tree (Figure A), your function should populate each next pointer to point to its next right node, just like in Figure B. The serialized output is in level order as connected by the next pointers, with '#' signifying the end of each level.
from __future__ import annotationsclass Node: def __init__( self, val: int = 0, left: Node | None = None, right: Node | None = None, next: Node | None = None, ): self.val = val self.left = left self.right = right self.next = nextclass Solution: # Time: O(n) # Space: O(1) def connect(self, root: Node | None) -> Node | None: current = root while current is not None: # Build the next level using the already-linked current level. level_head: Node | None = None level_tail: Node | None = None while current is not None: for child in (current.left, current.right): if child is None: continue if level_tail is None: level_head = child else: level_tail.next = child level_tail = child current = current.next current = level_head return root