我一直在尝试建立2-3个节点。到目前为止,我已经确认了加法功能的正常运行。唯一的问题是find函数,该函数被调用以在2-3节点内查找元素。它似乎根本不起作用。它内部的match指针根本不接受find_rec方法的返回值,即使我已经分配了它也是如此。每当调用该函数时,它只是获得一个新的给定地址,而我不知道为什么这样做。谁能帮我吗 ?告诉我我做错了什么?谢谢

**LValue and RValue**

E LValue() {return _first._value;}
E RValue() {return _second._value;}



**find function**

// Assuming this set contains an element y such that (x == y),
// return a reference to y. Such a y must exist; if it does not an
// assertion will fail.
E& find(E& x)
{
        // the match pointer is supposed to take
        // returned pointer from the find_rec function
        // Yet, it is not doing that at all.
    E* match = find_rec(x, _root);
    assert(match != nullptr);
    return *match;
}


**find_rec function**

// Helper function: find recursion
// function returns a pointer
E* find_rec(E& x, BNode<E>* root)
{
    if(root == nullptr)
        return nullptr;
    else
    {
        // 2-node
        if(!root->IsThree())
        {
            if(x == root->LValue())
                return &root->LValue();
            else if (x < root->LValue())
                return find_rec(x, root->GetLeft());
            else
                return find_rec(x, root->GetRight());
        }
        // 3-node
        else
        {
            if(x == root->LValue())
                return &root->LValue();
            else if(x == root->RValue())
                return &root->RValue();
            else if(x < root->LValue())
                return find_rec(x, root->GetLeft());
            else if(x < root->RValue())
                return find_rec(x, root->GetMiddle());
            else
                return find_rec(x, root->GetRight());
        }
    }
}

最佳答案

当树中不存在所需值时,该代码显然能够返回nullptr。

一旦进入这种情况,断言将触发,并且*match返回将失败。我希望您需要更改函数签名以提供允许这种情况的返回类型。

关于c++ - 如何在二叉搜索树中找到元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20785780/

10-11 04:11