-
鏈接 : 原題
-
題意:給定一個二叉樹
結構:
使其每一個節點的next指針都指向其右側的節點;如果右側沒有節點,就指向NULL。
如圖:
- 思路:
因爲是給同一層的節點加上next,所以層序遍歷即可。
使用queue ,對每一層的節點,每次取出兩個(如果是最後一個節點就特判,指向NULL),讓前一個指向後一個即可。 - 代碼:
class Solution {
public:
Node* connect(Node* root) {
if(!root) return NULL;
queue<Node*> q;
q.push(root);
while(!q.empty()){
int n = q.size();
for(int i = 0;i < n;i ++){
Node* tmp1 = q.front(); q.pop();
if(i != n-1){
Node* tmp2 = q.front();
tmp1->next = tmp2;
}
if(tmp1->left)
q.push(tmp1->left);
if(tmp1->right)
q.push(tmp1->right);
}
}
return root;
}
};
- 遇到的問題:
1、許多節點指針類的題目不要忘記首先對root進行判定
if(!root) return NULL;
2、對每一層的計數,開始時我還想每次push進queue就 num++,但是直接
n = q.size() 即可。
3、因爲題目初始化的時候 next、left、right都初始化爲NULL,所以
(1)如果 i == n-1 ,不用 tmp1->next = NULL ,這樣會報錯的。
(2)如果tmp1->left tmp1-right = NULL,也不能q.push()進去,自己默認爲會push空,就不佔隊列,這樣也會報錯,所以需要if 判定。
指針真是好多細節。