0

したがって、セグメンテーション違反を返し続けるため、この関数の実行に問題があります。「削除ルート」に絞り込みました。行ですが、このエラーを修正する方法がわかりません。

助言がありますか?

割り当てに含まれる事前条件と事後条件は次のとおりです。

// 前提条件: 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 に答える