C++ 指向C+中结构的指针+;

C++ 指向C+中结构的指针+;,c++,pointers,struct,C++,Pointers,Struct,我正在努力解决GFG上的问题。 给出了一些代码(无法粘贴到此处,因为此处显示了太多代码) 我需要对populateNext(node*p)进行编码,其中p是树的根节点。 我对函数进行了如下编码,但它不工作,输出为3->-1,而不是3->8->10->12->-1 void populateNext(struct node* p) { static node* x=NULL; if(p==NULL) return; populateNext(p->right);

我正在努力解决GFG上的问题。 给出了一些代码(无法粘贴到此处,因为此处显示了太多代码)

我需要对
populateNext(node*p)
进行编码,其中p是树的根节点。 我对函数进行了如下编码,但它不工作,输出为
3->-1
,而不是
3->8->10->12->-1

void populateNext(struct node* p)
{
    static node* x=NULL;
    if(p==NULL) return;
    populateNext(p->right);
    p->next=x;
    x=p;\
    populateNext(p->left);
}
我认为创建的
x
节点从未被修改,因此主函数
ptr
中的指针不会向前移动。然后我寻找了更多的解决方案,找到了一个类似的双指针解决方案。我不知道为什么我的那个坏了,但下面的那个坏了

void find(struct node* root,struct node **nextr)
{
    if(root)
    {
        find(root->right,nextr);
        
        root->next = *nextr;
        
        *nextr = root;
        
        find(root->left,nextr);
    }
}
void populateNext(struct node* p)
{
   struct node* next = NULL;
   find(p,&next);
}
我知道指针x存储的是结构变量的地址,每次调用函数时,我都会给指针分配一个新的节点指针,这样它就可以工作了。我尝试将节点
x
声明为全局,但仍然是相同的答案
3->-1


我试着搜索结构的指针,但到处都只给出了如何做。我想问为什么代码不适用于单指针,为什么它适用于指针到指针,指针到指针的用途是什么,即为什么我们使用is?单指针的局限性是什么?

比双指针更好的名称是指针到指针。这意味着,您正在分配4个字节(在32位系统中)来保存某物的地址。它是什么取决于程序员。如果您使用指针指向指针,那么您持有的是另一个地址的地址,它可能持有某物的另一个地址(如此结构)。可以进行任何组合


在第一次尝试中,每个递归调用都有自己的
x
变量-这是错误的。该算法需要公共
nextr
变量,该变量只分配一次,并在每个递归级别上使用。这就是你的程序开始工作的原因


第二次尝试在堆栈上分配了
next
地址,初始化为
NULL
。此地址被传递给递归的
查找
函数(
&next
),该函数依次知道它是什么,并向它写入(
*nextr=root
)。这是在
populateNext
中分配的
next
变量堆栈上进行的写入,就像在每次查找调用上一样

“每个递归调用都有它自己的x变量,这是错误的,因为我使用了xstatic@RitikaGupta右键,选中making
static struct node*x=NULL
而不是
静态节点*x=NULL仍然相同problem@RitikaGupta我鼓励您使用Debugger,比如
gdb
或它的可视化叠加来检查问题所在。特别检查
x
变量内容和每个重现级别的地址是否相同。下一件事是遵循
x
更改,并将其与第二个解决方案进行比较。我将尝试相同的方法。非常感谢。