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

标签 c++ pointers recursion

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

相关文章:

C++ 在 win32 控制台中制作游戏

c - 为什么指针 (*) 和数组 ([]) 符号绑定(bind)到变量名而不是键入变量声明?

c++ - std::string 到 std::regex

c - 为结构中的数组分配内存(在 C 中)

c - 指针算术,指针指向 double

c++ - 多参数树遍历

python - 在 Python 中追加递归方法的最佳方式是什么?

Java递归函数失败

c# - C++ C# 委托(delegate)等效

c++ - Windows 文件夹共享 API