我一直在尝试实现二叉搜索树的删除功能,但是还没有能够使其在所有情况下正常工作。
这是我最新的尝试:
Node* RBT::BST_remove(int c)
{
Node* t = get_node(c);
Node* temp = t;
if(t->get_left() == empty)
*t = *t->get_left();
else if(t->get_right() == empty)
*t = *t->get_right();
else if((t->get_left() != empty) && (t->get_right() != empty))
{
Node* node = new Node(t->get_data(), t->get_parent(), t->get_colour(), t->get_left(), t->get_right());
*t = *node;
}
return temp;
}
Node* RBT::get_node(int c)
{
Node* pos = root;
while(pos != empty)
{
if(c < pos->get_data())
pos = pos->get_left();
else if(c == pos->get_data())
return pos;
else
pos = pos->get_right();
}
return NULL;
}
节点是一个元素,空节点是一个没有任何内容的元素。
我只是想交换这些值,但是我遇到了运行时错误。有什么想法吗?
编辑:我将temp返回以便稍后删除它。
谢谢
remove()
函数的代码? - wilhelmtell