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)
nella prova ho fatto, tramite un ciclo while, l'inserimento dei seguenti nodi: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"; } } } }
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.codice:chiave valore 7 10 2 5 8 15 1 7 3 6 20 4
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è?

Rispondi quotando