我一直在尝试建立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/