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

时间:2017-09-28 12:58:38

标签: c++ pointers recursion

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

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

db.collection.aggregate([       
    { "$match": { FacilityID: '59a53f0c6077b2a029c52b7f', ProjectID: '59c1171f734bcb3038e2bb67'} },
    { "$group": { _id: "$TeamMemberUserID", Duration: {$sum: "$Duration"} } },
    { "$project": { TeamMemberUserID: "$_id", _id: 0, Duration: 1 } }
])

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

1 个答案:

答案 0 :(得分:0)

不修改主函数中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