將每個節點與右邊的節點建立next關係,你只能使用常量級額外空間。 使用遞迴解題也符合要求,本題中遞迴程式占用的棧空間不算做額外的空間複雜度。
兩種方法,bfs和遞迴
方法一 遞迴
class
solution
:def
connect
(self,root)
:def
dfs(root):if
not root:
return
left=root.left
right=root.right
while left:
#終止條件:當前節點為空時
left.
next
=right #建立了左右兩節點的關係
left=left.right #左節點不斷往右,右節點不斷往左,建立二者之間的next
right=right.left
dfs(root.left)
#對左節點也不斷遍歷
dfs(root.right)
#對右節點也不斷遍歷
dfs(root)
#函式內:以當前節點為起始,完成從上往下的縱深串聯,再遞迴的呼叫當前節點left和right
return root
參考鏈結,遞迴講的很好,圖形象
方法二 迭代
class
solution
:def
connect
(self,root):if
not root:
return
leftmost=root#最後返回根節點時,都要將root提前賦給乙個使用值,保證返回的root不是最後改變的那一部分
while leftmost.left:
#左節點存在是條件
head=leftmost
while head:
head.left.
next
=head.right
if head.
next
:#即左節點的next右節點存在
head.right.
next
=head.
next
.left
head=head.
next
leftmost=leftmost.left
return root
遍歷某一層的節點時,這層節點的 next 指標已經建立。因此我們只需要知道這一層的最左節點,就可以按照鍊錶方式遍歷,不需要使用佇列。空間複雜度:o(1),不需要儲存額外的節點。 參考鏈結
迭代解法參考二
116 填充每個節點的下乙個右側節點指標
給定乙個完美二叉樹,其所有葉子節點都在同一層,每個父節點都有兩個子節點。二叉樹定義如下 struct node 填充它的每個 next 指標,讓這個指標指向其下乙個右側節點。如果找不到下乙個右側節點,則將 next 指標設定為 null。初始狀態下,所有 next 指標都被設定為 null。示例 你...
116 填充每個節點的下乙個右側節點指標
給定乙個 完美二叉樹 其所有葉子節點都在同一層,每個父節點都有兩個子節點。二叉樹定義如下 struct node 填充它的每個 next 指標,讓這個指標指向其下乙個右側節點。如果找不到下乙個右側節點,則將 next 指標設定為 null。初始狀態下,所有 next 指標都被設定為 null。高階 ...
116 填充每個節點的下乙個右側節點指標
給定乙個完美二叉樹,其所有葉子節點都在同一層,每個父節點都有兩個子節點。二叉樹定義如下 struct node 填充它的每個 next 指標,讓這個指標指向其下乙個右側節點。如果找不到下乙個右側節點,則將 next 指標設定為 null。初始狀態下,所有 next 指標都被設定為 null。方法1的...