Pages: [1]   Go Down
Print
Author Topic: cancellazione albero n-Ario  (Read 891 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Giovi89
Apprendista Forumista
**
Offline Offline

Posts: 273


« on: 25-10-2009, 19:28:35 »

Salve ragazzi,
ho provato a implementare la cancellazione di un albero n-Ario ma quando lo eseguo mi restituisce null nn riesco a capire il motivo.. pray

Code:
public void delete(Object x) throws Exception
{
if(IsEmpty())
throw new Exception("albero vuoto");
else if(((Comparable)x).compareTo(root.getInfo())==0)
root=null;
else
delete(x, null);
}
private void delete(Object x, Nodo t) throws Exception
{
t=searchleaf();// ricerca una foglia che abbia sia il fratello che il figlio a null.
Object x1=search(x).getInfo();  //
search(x).setInfo(t.getInfo());  // EFFETTUO LO SWAP TRA L'INFO DELL'ELEMENTO DA
                t.setInfo(x1);                        //  CERCARE E QUELLO DELLA FOGLIA
Nodo aux=t.getPrec();       //mi trovo il nodo precedente alla foglia
if(aux.getSon()!=null)       // e verifico se per caso la foglia sia un figlio o un fratello del precedente per
aux.setSon(null);     // poi effettuare la cancellazione
else
aux.setBrother(null);
}

public Nodo searchleaf()
{
return searchleaf(root);
}
private Nodo searchleaf( Nodo a)
{
if(a!=null)
{
Nodo t=a.getSon();
while(t!=null||(t.getSon()!=null&&t.getBrother()!=null)) // QUESTO METODO RICERCA LA FOGLIA
{                                          // CON IL FIGLIO E IL FRATELLO ENTRAMBI A NULL TRAMITE
searchleaf(t);                  // IL METODO DEL PREORDER
t=t.getBrother();
}
return t;
}
return null;
}

potete postare gentilmente una vostra soluzione se possibile oppure correggere questa?
Grazie anticipatamente!
Logged
LtWorf
Forumista Esperto
****
Offline Offline

Posts: 1.079

Ogni cosa da me scritta è da intendersi come opinione personale e non come dato di fatto. Anche le eventuali dimostrazioni matematiche da me scritte saranno opinioni personali e quindi dovranno venire dimostrate da una terza parte di fiducia


WWW
« Reply #1 on: 26-10-2009, 08:26:13 »

Ma quale sarebbe il motivo di avere due metodi, uno dei quali con un parametro che è sempre null?

Code:
Object x1=search(x).getInfo();  //
                search(x).setInfo(t.getInfo());
AAAAAAAAAAAARGH rifai la stessa ricerca due volte per risparmiare una variabile? Subito in ginocchio sui ceci!


Code:
Object x1=search(x).getInfo();
Ho tanto l'impressione che x1 sia sempre uguale a x, tranne nel caso in cui non esista, e quindi sta ricerca sia inutile.


Code:
t.setInfo(x1);  //  CERCARE E QUELLO DELLA FOGLIA
A parte il commento che secondo me c'entra poco. Perché imposti l'info della foglia se tanto la vuoi eliminare?


E per finire: come fa a restituire null se sono metodi void?
Logged

There are some OO programming languages. I will create the first -_-' language.

LtWorf
Pages: [1]   Go Up
Print
Jump to: