我有一个二叉搜索树,我想在其中使用前序遍历(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/