2009-11-19 4 views
1

Pour faciliter la suppression d'une feuille, je me demande comment utiliser ma méthode de récupération (qui trouve un nœud) pour la récupérer d'abord avant de la supprimer. Donc, de cette façon je n'ai pas recoder le même schéma de mise en boucle qui est en retreive:Utiliser la méthode Retrieve pour rechercher pour supprimer, BST C++

bool BST::retrieve(const char *key, data& aData) const 
{ 
    for (int i = 0; i < maxSize/2; i++) 
    {//iterate 
     if (! items[2*i+1].empty &&//proceed 
       items[2*i+1].theData.getName() < key) 
     {// then search leftward 
      if (items[2*i+1].theData == key) 
      { 
       aData.setName(key); 
       return true; 
      } 
     } 
     else if (! items[2*i+2].empty && 
        items[2*i+2].theData.getName() > key) 
     { // then search rightward 
      if (items[2*i+2].theData == key) 
      { 
       aData.setName(key); 
       return true; 
      } 
     } 
    }// reiterate on condition. 
    return false; 
} 

bool BST::remove(const char* key) 
{ 
    this->retrieve(key, items[Position].theData); 
     // get the position of the node we want to delete. 
     if (items[2*Position+1].empty && 
       items[2*Position+2].empty) 
     { 
      // then it is a leaf. 
     } 
} 

BST::BST(int capacity) : items(new item[capacity]), Position(0), 
leftChild(0), rightChild(0), maxSize(capacity), size(0), isLeaf(0) 
{ 

} 

Position varaible arrive comme 0. et si je déclare une plaine ancienne int isLeaf au début de la méthode retreive, puis lorsque nous le trouvons, attribuez-le, isLeaf = 2*i+1; ou isleaf = 2*i+2. Je devrais alors passer ce POD, isLeaf comme paramètre. Par conséquent, j'aurais besoin d'une fonction d'assistance pour la méthode remove?

Il semble qu'il serait superflu de coder ma méthode remove pour récupérer un noeud ..

Fondamentalement im après l'indice.

+0

Je ne peux pas utiliser isLeaf en tant que membre privé pour le BST pour mon index souhaité, car la valeur l spécifie un objet constant, sont les erreurs. – user40120

Répondre

0

Je vous suggère de changer votre fonction de récupération pour utiliser une fonction qui trouve l'index des données que vous essayez de trouver puis remplir le champ aData. Ensuite, vous pouvez utiliser la nouvelle fonction à la fois dans la fonction de récupération et de suppression pour trouver l'index.

Questions connexes