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;
        }
    }
};

猜你喜欢

转载自blog.csdn.net/u011526967/article/details/82388046