ciao a tutti, ho implementato il metodo inserisci, il quale inserisce un nuovo nodo come foglia in un albero binario di ricerca. il metodo è diviso in 2 fasi: la prima è quella di ricerca del padre a cui agganciare il nuovo nodo, la seconda è quella di inserimento del nodo figlio.
ho notato che il metodo non aggancia i nodi figli al posto giusto. posto il codice del metodo:
metodo void inserisci(nodo node)
codice:
template<class tipoelem>
void bstreep<tipoelem>::inserisci(typename bstreep<tipoelem>::nodo node)
{
if(this->binalberovuoto())
this->insbinradice(node);
else
{
if(!this->appartiene(node))
{
bool trovato = false;
nodo tmp = this->binradice();
while(!trovato)
{
if(node->getchiave() < tmp->getchiave())
{
if(this->sxvuoto(tmp))
trovato = true;
else
tmp = this->figliosx(tmp);
}
else
{
if(this->dxvuoto(tmp))
trovato = true;
else
tmp = this->figliodx(tmp);
}
}
if(node->getchiave() < tmp->getchiave())
{
this->insfigliosx(tmp);
this->figliosx(tmp)->setetichetta(node->getetichetta());
this->figliosx(tmp)->setchiave(node->getchiave());
cout << "A\n";
}
else
{
this->insfigliodx(tmp);
this->figliodx(tmp)->setetichetta(node->getetichetta());
this->figliodx(tmp)->setchiave(node->getchiave());
cout << "B\n";
}
}
}
}
nella prova ho fatto, tramite un ciclo while, l'inserimento dei seguenti nodi:
codice:
chiave valore
7 10
2 5
8 15
1 7
3 6
20 4
subito dopo il ciclo per inserire i dati ho invocato il metodo min, che restituisce il valore del nodo con la chiave più piccola, e mi dà come risultato il valore 4 anzichè 7.
premesso che secondo me il metodo inserisci è fatto bene, ho notato che nella parte di inserimento del nodo come figlio viene sempre esegueto il blocco else, a prescindere che la chiave del nodo da inserire sia minore o maggiore di quella del nodo in esame (tmp). perchè?