所以我在运行此函数时遇到问题,因为它不断返回分段错误。我把它缩小到了“删除根”;行,但不知道如何解决此错误。
有什么建议吗?
以下是作业中包含的前置条件和后置条件:
//前提条件:root是指向二进制搜索根的指针 树。
//后置条件:该函数删除二进制搜索的所有节点 树和设置// root到NULL。
template<class Key, class Item>
void tree_clear(bstNode<Item, Key>*& root)
{
bstNode<Item, Key>* child;
if(root != NULL)
{
child = root->left();
tree_clear(child);
child = root->right();
tree_clear(child);
delete root;
root = NULL;
}
}
答案 0 :(得分:0)
你的参数是一个指向引用的指针......我认为它应该是一个指向指针的指针:
void tree_clear(bstNode<Item, Key>** root)
答案 1 :(得分:0)
如果您无法更改签名,请尝试
template<class Key, class Item>
void tree_clear(bstNode<Item, Key>*& root)
{
bstNode<Item, Key>* child;
if(root != NULL)
{
if (child = root->left()) {
tree_clear(child);
}
if (child = root->right()) {
tree_clear(child);
}
delete root;
}
}