0

所以我在运行这个函数时遇到了麻烦,因为它一直返回一个分段错误。我已将其缩小到“删除根目录”;行,但不知道如何解决此错误。

有什么建议么?

这是作业中包含的前置条件和后置条件:

// 前置条件: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;
 }
}
4

2 回答 2

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;
  }
}
于 2012-05-10T20:58:15.843 回答
0

您的参数是指向引用的指针......我认为它应该是指向指针的指针:

void tree_clear(bstNode<Item, Key>** root)
于 2012-05-01T04:17:59.807 回答