117.填充每个节点的下一个右侧节点指针II
# 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': head = root while head: # 当前层的头结点 cur = head # 当前处理层 pre,head = None,None # 初始化头结点和前置节点 # 头部节点用来标识所处的层数,和用来退出最后的循环 # 前置节点的意思用来记录当前节点上一个兄弟节点是什么,然后用于next指向 while cur: if cur.left: # 判断左节点存在不存在 # 判断前置节点存在否,这里的意思就代表当前节点的左儿子是否为当前层第一个节点 if not pre: # 若果是的话,就定义头部节点和前置节点。 pre = head = cur.left else: # 不是的话,就将cur.left前边的兄弟节点与之相连, pre.next = cur