Il testo è il seguente: "Implementa un albero binario di ricerca non generico per memorizzare un insieme di Stringhe ordinate alfabeticamente. L'albero deve avere i seguenti metodi:
_ insert -> per l'inserimento di una Stringa;
_ printCrescente -> per la stampa del contenuto dell'albero in ordine alfabetico crescente (dalla A alla Z);
_ printDecrescente -> per la stampa del contenuto dell'albero in ordine alfabetico decrescente (dalla Z alla A);
_ getPiuLunga -> resituisce la stringa più lunga presente."
I primi tre metodi li ho implementati senza difficoltà, ma il metodo getPiuLunga mi sta facendo uscire di testa.
Riporto il mio operato:
- Codice:
public class Esercizio
{
public static void main(String[] args)
{
AlberoStringhe str_tree = new AlberoStringhe();
str_tree.insert("Berlino");
str_tree.insert("Parigi");
str_tree.insert("Copenaghen");
str_tree.insert("Lisbona");
str_tree.insert("Zurigo");
str_tree.insert("Amsterdam");
str_tree.insert("Londra");
str_tree.insert("Dublino");
System.out.print("Ordine crescente -> ");
str_tree.print(true); // uso true per la stampa in ordine crescente
System.out.print("\n\nOrdine decrescente -> ");
str_tree.print(false); // uso false per la stampa in ordine decrescente
System.out.print("\n\nLa più lunga è: " + str_tree.getPiuLunga());
}
}
class AlberoStringhe
{
class Nodo
{
String dato;
AlberoStringhe left;
AlberoStringhe right;
Nodo(String s)
{
this.dato = s;
}
}
private Nodo radice;
public void insert(String str)
{
if(radice == null)
{
radice = new Nodo(str);
radice.left = new AlberoStringhe();
radice.right = new AlberoStringhe();
}
else
{
if(radice.dato.compareTo(str) < 0)
radice.right.insert(str);
else
radice.left.insert(str);
}
}
public void print(boolean val)
{
if(val)
printCrescente();
else
printDecrescente();
}
private void printCrescente()
{
if(radice != null)
{
radice.left.printCrescente();
System.out.print(radice.dato + " ");
radice.right.printCrescente();
}
}
private void printDecrescente()
{
if(radice != null)
{
radice.right.printDecrescente();
System.out.print(radice.dato + " ");
radice.left.printDecrescente();
}
}
public String getPiuLunga()
{
return getPiuLunga(radice);
}
private String getPiuLunga(Nodo nodo)
{
String s = "";
// ??????????
return s;
}
}
La mia idea è quella di chiamare il metodo getPiuLunga() dal main, il quale chiama un altro metodo getPiuLunga passandogli in input la radice dell'albero (overloading) così da poter realizzare la ricorsione con i sottoalberi sx e dx. Il problema è che qualunque tipo di implementazione io provi, non funziona.
Qualcuno riuscirebbe gentilmente ad aiutarmi in questa implementazione riportandomi del codice?