LeetCode 117 填充每個節點的下一個右側節點指針

  • 鏈接 : 原題

  • 題意:給定一個二叉樹
    結構:
    在這裏插入圖片描述

    使其每一個節點的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 判定。
    指針真是好多細節。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章