題目描述:
給定乙個二叉樹
struct node
填充它的每個 next 指標,讓這個指標指向其下乙個右側節點。如果找不到下乙個右側節點,則將 next 指標設定為 null。
初始狀態下,所有 next 指標都被設定為 null。
高階:
你只能使用常量級額外空間。
使用遞迴解題也符合要求,本題中遞迴程式占用的棧空間不算做額外的空間複雜度。
示例:
輸入:root = [1,2,3,4,5,null,7]
輸出:[1,#,2,3,#,4,5,7,#]
解釋:給定二叉樹如圖 a 所示,你的函式應該填充它的每個 next 指標,以指向其下乙個右側節點,如圖 b 所示。
樹中的節點數小於 6000
-100 <= node.val <= 100
方法1:
主要思路:
(1)借助佇列,實現層次遍歷,實現對next指標的賦值;
/*
// definition for a node.
class node
node(int _val) : val(_val), left(null), right(null), next(null) {}
node(int _val, node* _left, node* _right, node* _next)
: val(_val), left(_left), right(_right), next(_next) {}
};*/
class
solution
queue> q;
//輔助佇列
q.push
(root)
; node* cur_node=root;
while
(!q.
empty()
)//壓入下一層的指標
if(cur_node-
>left)
if(cur_node-
>right)}}
return root;}}
;
方法2:
主要思路:
(1)利用next指標,已經形成的鍊錶,實現層次的遍歷,不再使用佇列做輔助;
/*
// definition for a node.
class node
node(int _val) : val(_val), left(null), right(null), next(null) {}
node(int _val, node* _left, node* _right, node* _next)
: val(_val), left(_left), right(_right), next(_next) {}
};*/
class
solution
node* cur_head=root;
//當前層的頭結點
node* next_head=
null
;//下一層的形成的鍊錶的頭結點
while
(cur_head)
else
//用於獲得下一層的鍊錶的頭結點
if(next_head==
null)}
//右側指標
if(cur_head-
>right!=
null
)else
if(next_head==
null)}
//更新當前層的結點位置
cur_head=cur_head-
>next;
}//跳轉到下一層
cur_head=next_head;
next_head=
null;}
return root;}}
;
117 填充每個節點的下乙個右側節點指標 II
116題為完美二叉樹,所以這題116的遞迴法這裡不適用。leetcode 116.填充每個節點的下乙個右側節點指標 解法一 層次遍歷 definition for a node.class node node int val val val left null right null next nul...
117 填充每個節點的下乙個右側節點指標 II
給定乙個二叉樹 struct node 填充它的每個 next 指標,讓這個指標指向其下乙個右側節點。如果找不到下乙個右側節點,則將 next 指標設定為 null。初始狀態下,所有 next 指標都被設定為 null。高階 你只能使用常量級額外空間。使用遞迴解題也符合要求,本題中遞迴程式占用的棧空...
117 填充每個節點的下乙個右側節點指標 II
給定乙個二叉樹 struct node 填充它的每個 next 指標,讓這個指標指向其下乙個右側節點。如果找不到下乙個右側節點,則將 next 指標設定為 null。初始狀態下,所有 next 指標都被設定為 null。分析 這題 首先注意一點,每個節點 next 最初都是null,輸出就是 解法一...