117.填充每個節點的下一個右側節點指標II
阿新 • • 發佈:2020-06-30
# 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 = rootwhile 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.left
# 然後前置節點右移。
pre = pre.next# 與上邊是同一個道理
if cur.right:
if not pre :
pre = head = cur.right
else:
pre.next = cur.right
pre = pre.next
cur = cur.next
return root