C++每个节点的右向指针(用二级指针操作指针)

本文介绍了如何使用二级指针来操作树形结构中的节点,通过队列实现对树的层级遍历,并连接同一层级的节点。这种方法适用于需要直接修改指针本身的情况,如调整树的结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

核心就是用二级指针操作指针,现有一个一级指针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;
        }
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值