【发布时间】:2010-04-04 18:40:31
【问题描述】:
我一直在尝试为二叉搜索树实现删除功能,但无法让它在所有情况下都能正常工作。
这是我最近的尝试:
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;
}
t 是一个节点,而 empty 只是一个没有任何内容的节点。
我只是想交换值,但遇到运行时错误。有什么想法吗?
编辑:我将返回 temp 以在之后将其删除。
谢谢
【问题讨论】:
-
如果是作业问题,请将问题标记为作业。
-
我假设我正在制作一个二叉搜索树,所以我不太确定,但是这棵树上的每个节点最多可以有两个孩子。
-
能否请您完整发布
remove()函数? -
感谢到目前为止的回复,我已经更新了一些信息。我在 remove() 中返回 temp,然后在其上使用 delete。
标签: c++ binary-tree