allora posto il codice che non va ma lascio comunque il link in caso si voglia consultare il resto del codice.
codice:
template<class tipoelem>
void pricodaab<tipoelem>::inserisci(tipoelem elem)
{
nodoalberop<tipoelem> *tmp = NULL;
int priority;
cout << "inserire la priorita' del nodo con valore " << elem << ": ";
cin >> priority;
//INSERIMENTO DELLA FOGLIA (MODIFICA DELLA STRUTTURA
if(this->pricodavuota())
{
pric.insbinradice(tmp);
pric.binradice()->setetichetta(elem);
pric.binradice()->setpri(priority);
ultimo = pric.binradice();
delete tmp;
}
else
{
if(ultimo == pric.binradice())
{
pric.insfigliosx(pric.binradice());
ultimo = pric.figliosx(pric.binradice());
ultimo->setetichetta(elem);
ultimo->setpri(priority);
}
else
{
if(ultimo == pric.figliosx(pric.binpadre(ultimo)))
{
tmp = pric.binpadre(ultimo);
pric.insfigliodx(tmp);
ultimo = pric.figliodx(tmp);
ultimo->setetichetta(elem);
ultimo->setpri(priority);
delete tmp;
}
else
{
tmp = ultimo;
while((tmp != pric.binradice()) && (tmp == pric.figliodx(pric.binpadre(tmp))))
tmp = pric.binpadre(tmp);
if(tmp != pric.binradice())
tmp = pric.figliodx(pric.binpadre(tmp));
while(!(pric.sxvuoto(tmp)/* && pric.dxvuoto(tmp)*/))
tmp = pric.figliosx(tmp);
pric.insfigliosx(tmp);
ultimo = pric.figliosx(tmp);
ultimo->setetichetta(elem);
ultimo->setpri(priority);
delete tmp;
}
}
}
//AGGIUSTAMENTO DELLA STRUTTURA
bool finito = false;
tmp = ultimo;
while(!finito && (tmp != pric.binradice()))
{
if(tmp->getpri() < pric.binpadre(tmp)->getpri())
{
tipoelem elemtemp = tmp->getetichetta();
int pritemp = tmp->getpri();
tmp->setetichetta(pric.binpadre(tmp)->getetichetta());
tmp->setpri(pric.binpadre(tmp)->getpri());
pric.binpadre(tmp)->setetichetta(elemtemp);
pric.binpadre(tmp)->setpri(pritemp);
tmp = pric.binpadre(tmp);
}
else
finito = true;
}
}
chi mi aiuta a capire dov'è l'errore?