为什么即使传递给函数作为参考,指针也未被分配



函数" haspath"被赋予指向二进制树和两个整数的根指针。如果整数a到整数b之间有路径,它将返回。我以为我可以使用助手函数"查找"在树上找到整数a",然后更改指针作为参考,然后从" a"的树节点找到整数b。但是,查找函数并未通过引用通过的指针更改指针。

//辅助功能在树中找到一个整数作为参考

传递的整数
bool find(BinaryTreeNode*&node, int a){
    if (node==nullptr){
        return false;
    } else if (node->data==a){
        return true;
    }else {
        return find(node->left, a) or find(node->right, a);
    }
}

//a function returns if there is a path between integer a and b in the 
//binary tree passed in as root node
bool hasPath(BinaryTreeNode* node, int a, int b){
    if (node==nullptr) return false;
    BinaryTreeNode*temp = node;
    return find(temp,a) //the pointer temp should be changed, but didn't
            and 
            find(temp, b);
}

您的find功能中的任何内容都分配给node参考,因此temp中的CC_3变量不变。

要使这项工作要更改hasPath,以便它返回您感兴趣的节点。无需使用参考。由于某些原因,新手通常会忽略函数可以返回值的事实。

find更改为此

BinaryTreeNode* find(BinaryTreeNode* node, int a)
{
    if (node == nullptr)
    {
        return nullptr; // return nullptr for not found
    }
    else if (node->data == a)
    {
        return node; // found the node
    }
    else
    {
        // recurse left or right
        BinaryTreeNode* temp = find(node->left, a);
        return temp ? temp : find(node->right, a);
    }
}

然后更改hasPath以使用返回的节点

bool hasPath(BinaryTreeNode* node, int a, int b)
{
    if (node == nullptr)
        return false;
    node = find(node, a);
    if (node == nullptr)
        return false;
    node = find(node, b);
    if (node == nullptr)
        return false;
    return true;
}

顺便说一句,我没有对您算法的有效性发表任何评论,但我相信上面的代码是您要实施的。

最新更新