0

二分探索ツリーのデストラクタを書きたい (ツリー内のすべてのノードを削除することになっている) ここに私がこれまでに得たものがあります

virtual ~BST() {
  BSTNode<Data>* node = root;
  if (node == NULL){
    return;
  }else if (node->left) {
      while(node->left){
        delete node;
      }
  }else if (node->right){
      while(node->right)
        delete node;
  }
        isize = 0;
}

コードに問題があることはわかっていますが、どうすれば修正できますか

4

3 に答える 3

3
void BST::deleteNode(BSTNode<Data> *node) {
    if (node) {
        deleteNode(node->left);
        deleteNode(node->right);
        delete node;
    }
}

BST::~BST() {
    deleteNode(root);
}
于 2013-04-11T22:15:16.877 に答える
3

sを失いelseます。それ以外の場合は、ツリーにleft. right削除されません。

を失うwhile。ノードには独自のデストラクタが必要であり、再帰的に削除する必要があります。

最後に s を失いifます。delete NULL が有効だからです。

virtual ~BST() {
  BSTNode<Data>* node = root;
  if (node == NULL){
    return;
  }  
  delete node->left;
  delete node->right;
  isize = 0;
}
于 2013-04-11T22:11:58.507 に答える