1. 程式人生 > >C++每個節點的右向指標(用二級指標操作指標)

C++每個節點的右向指標(用二級指標操作指標)

核心就是用二級指標操作指標,現有一個一級指標TreeLinkNode *p1

二級指標 TreeLinkNode **p2=&p1

什麼意思呢,就是一級指標取地址後傳遞給二級指標讓他儲存我的地址,不要多想,就是這麼簡單。

好,現在呢單p2這兩個字母,就是一個二級指標了。那麼p1==*p2懂了吧,(p2用*取出對應地址裡面的東西),也有

(實際裡邊放置的玩意兒)==*p1==**p2

看到這裡你會說,我費力整出個二級指標幹嘛,一級指標不就能訪問記憶體了嗎。但是,朋友,你想啊,函式傳參的時候(除引用、賦值),是不是隻是一個指標複製給另一個指標它裡面的玩意兒(地址)然後他自己就跑了,你想操作他本身時他早就溜了。所以呢,為了操作它本身,我們需要提取出指標本身的地址,即二級指標。從而來改變整個樹的結構

廢話這麼多,二級指標瞭解了吧,上程式碼:

class Solution {
public:
    void connect(TreeLinkNode *root) {
        if(root==NULL)
            return;
        //用二級指標來操作指標
        queue<TreeLinkNode **>q;
        q.push(&root);
        while(!q.empty())
        {
            queue<TreeLinkNode **>qt;
            while(!q.empty())
            {
 
                
                TreeLinkNode **temp=q.front();
                if((*temp)->left)
                    qt.push(&((*temp)->left));
                if((*temp)->right)
                    qt.push(&((*temp)->right));
                q.pop();
                if(q.empty())
                    (*temp)->next=NULL;
                else
                    (*temp)->next=*q.front();
            }
            q=qt;
        }
    }
};