我正在编写一个函数,该函数将从具有关联给定键的二叉搜索树中删除一个条目。到目前为止,我的代码有这个:
template <typename Item, typename Key = Item>
bool BSTree<Item,Key>::remove(const Key& key) {
bool removed = false;
Node* ptr = root;
if(ptr == NULL)
return removed;
while(key != ptr) {
if(ptr == NULL)
return removed;
else if(key > ptr)
ptr = ptr->right();
else
ptr = ptr->left();
}
removed = true;
Item max = max(ptr);
ptr->data() = max;
Node* prev = ptr;
while (ptr != NULL) {
prev = ptr;
ptr = ptr->right();
}
delete ptr;
if (prev->left() != NULL)
prev = copy(prev->left());
delete prev;
return removed;
}
Copy 是我已经编写的另一个函数,它将使用递归方法将所有值从某个节点传输到树的末尾。我相信这个功能应该可以工作,但我不完全确定,希望能得到一些反馈。
我对函数的最后三行也有问题。在它们中的每一个中,“if”、“delete”和“return”都带有下划线,并给出错误“错误:预期声明”。我不知道这是怎么回事,非常感谢您的反馈!