gpt4 book ai didi

c++ - 指针在退出递归函数后更改其地址

转载 作者:太空宇宙 更新时间:2023-11-04 12:56:23 24 4
gpt4 key购买 nike

我有一个二叉搜索树,我想在其中使用前序遍历(ROOT、LEFT、RIGHT)获取特定节点的地址,然后用它做一些事情。

递归函数有效,但当它退出时,指向节点的指针变回 NULL。

void rlr(Node * x,Node * z)
{
if (x != NULL)
{
if (a condition)
{
z = x;
}
rlr(x->get_left(),z);
rlr(x->get_right(),z);
}
}

void main()
{
....
Node * z = NULL;
rlr(root,z);
while(z!=NULL)
....
}

更确切地说,在 rlr 函数中,如果条件为真,则 z 指向一个节点,它应该指向该节点,但是当它退出该函数时,z 指向回 NULL,而不是指向该特定节点。

最佳答案

main函数中z的值没有被修改。添加一个间接级别以使其工作:

void rlr(Node * x,Node ** z)
{
if (x != NULL)
{
if (a condition)
{
*z = x;
}
rlr(x->get_left(),z);
rlr(x->get_right(),z);
}
}

void main()
{
....
Node * z = NULL;
rlr(root,&z);
while(z!=NULL)
....
}

应该可以。请看Node** z 而不是函数参数中的 Node* z*z 而不是赋值中的 z&z 在函数调用中代替 z

关于c++ - 指针在退出递归函数后更改其地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46469803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com