我有一个二叉搜索树,我想在其中使用前序遍历(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而不是指向该特定节点。
答案 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