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.
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