116 填充每個節點的下乙個右側節點指標

2022-01-26 07:08:29 字數 2053 閱讀 8202

給定乙個完美二叉樹,其所有葉子節點都在同一層,每個父節點都有兩個子節點。二叉樹定義如下:

struct node
填充它的每個 next 指標,讓這個指標指向其下乙個右側節點。如果找不到下乙個右側節點,則將 next 指標設定為null

初始狀態下,所有 next 指標都被設定為null

示例:

輸入:,"next":null,"right":,"val":2},"next":null,"right":,"next":null,"right":,"val":3},"val":1}輸出:,"right":null,"val":6},"right":null,"val":5},"right":null,"val":4},"next":,"next":null,"right":,"val":3},"right":,"val":2},"next":null,"right":,"val":1}

class

solution(object):

defconnect(self, root):

""":type root: node

:rtype: node

"""if

notroot:

return

none

que =[root]

while

len(que):

t =for i in

range(len(que)):

if i==len(que)-1:

que[i].next =none

else

: que[i].next = que[i+1

]

ifque[i].left:

que =t

return root

利用層序遍歷,當處在在一層的時候,把這一層的結點 「串起來」 ,末尾的結點指向none即可。

利用了乙個輔助棧,花費了o(n)的空間。

不用輔助棧,改用變數來記錄一層的結點數量,實現常量級額外空間

class

solution(object):

defconnect(self, root):

""":type root: node

:rtype: node

"""if

notroot:

return

#把視角切換到當前結點,我們來關心當前結點的左右孩子

#第一種情況:左孩子直接連線右孩子,很簡單

ifroot.left:

root.left.next =root.right

#第二種情況,右孩子在樹的左邊,或者右孩子在樹的右邊

#① 在左邊的時候,根據當前結點的next找到右邊的那個結點

# 第二種情況:處理右孩子,通過當前節點的next指標,找到右孩子的next結點。

# 要注意判斷當前結點的位置是在樹的左側還是右側(邊界)

if root.next and

root.right:

root.right.next =root.next.left

#② 在右邊的時候,有可能處在邊界位置,把它設定為none。(多次一舉,因為預設next是預設指向none的)

116 填充每個節點的下乙個右側節點指標

給定乙個完美二叉樹,其所有葉子節點都在同一層,每個父節點都有兩個子節點。二叉樹定義如下 struct node 填充它的每個 next 指標,讓這個指標指向其下乙個右側節點。如果找不到下乙個右側節點,則將 next 指標設定為 null。初始狀態下,所有 next 指標都被設定為 null。示例 你...

116 填充每個節點的下乙個右側節點指標

將每個節點與右邊的節點建立next關係,你只能使用常量級額外空間。使用遞迴解題也符合要求,本題中遞迴程式占用的棧空間不算做額外的空間複雜度。兩種方法,bfs和遞迴 方法一 遞迴 class solution def connect self,root def dfs root if not root...

116 填充每個節點的下乙個右側節點指標

給定乙個 完美二叉樹 其所有葉子節點都在同一層,每個父節點都有兩個子節點。二叉樹定義如下 struct node 填充它的每個 next 指標,讓這個指標指向其下乙個右側節點。如果找不到下乙個右側節點,則將 next 指標設定為 null。初始狀態下,所有 next 指標都被設定為 null。高階 ...