Newsgroup: it.comp.java
Titolo: Dov'è, DOV'È l'errore??????????????

Ciao a tutti :-)
Grazie in anticipo per aver aiutato un povero bisognoso...
Allora, un mese fa (forse Alex se lo ricorderà come un mezzo incubo) avevo
chiesto aiuto per realizzare gli alberi in Java, poi non mi serviva più, ora
invece mi riserve (ma quanto bello è il C++?).
Questo è il codice "incriminato" (anzi: l'errore è sicuramente in insert, il
resto lo metto solo per completezza).
*** INIZIO CODICE ***
class Nodo
{
        public int      element;
        public Nodo     lchild,rchild;
        public Nodo     parent;
};
class Alberobinariodiricerca
{
        private static Nodo t=null;
        public static void  insert(int x)                        /////
L'ERRORE È QUI DENTRO (seek infatti funziona)
        {
            if (!(seek(x)))
            {
                // ricerca del punto di inserimento
                Nodo temp=null;
                while (t!=null)
                {
                    if (x<t.element)
                    {
                        temp=t;
                        t=t.lchild;
                    }
                    else
                    {
                        temp=t;
                        t=t.rchild;
                    };
                };
                // inserimento
                t=new Nodo();
                t.element=x;
                t.lchild=null;
                t.rchild=null;
                t.parent=temp;                                    ///// temp
punta sempre alla radice, e non al nodo superiore
                // ritorno alla radice
                while (t.parent!=null)
                {
                    t=t.parent;
                };
            };
        };
        public static boolean   seek(int x)
        {
            if (t==null)
                return(false);
            else
            {
                Nodo p=t;
                // ricerca
                boolean ris=false;
                do
                {
                    if (x==p.element) ris=true;
                    if (x<p.element) p=p.lchild;
                    else p=p.rchild; // caso x>(p.element)
                } while ((p!=null)&&(!ris));
                return(ris);
            };                        ///// qui ho cancellato un po' di
procedure, quindi forse
        };                            ///// le parentesi graffe sono un po'
più del dovuto,
                };                    ///// nell'originale è tutto ok
        };
    }
class programma
{
        public static void main(String argv[])
    	{
                    Alberobinariodiricerca  albero=new
Alberobinariodiricerca();
                    // stampa dell'albero
                    albero.insert(18);
                    albero.insert(5);
                    albero.insert(2);
                    albero.insert(48);
                    albero.insert(977);
                };
}
*** FINE CODICE ***
In pratica, ho visto che t.parent non punta al nodo "superiore" ma sempre al
primo (la radice).
Perché, se ad ogni ciclo ho temp=t, con t variabile?
Grazie infinite - saluti :-)
Marco Zanon (
m.z...@usa.net
)
http://www.geocities.com/SiliconValley/Peaks/6455
(BUY CDS AT THE LOWEST PRICES through my site!!!
Zamorano fan page, free MIDI mailing list, Music db...)

.......

Fabio

2) se metto tmp1=t all'inizio, e lavoro poi con tmp1, non è che all'uscita


invece mi riserve (ma quanto bello è il C++?).
Il C++ e' molto bello ... io ti consiglio di continuare a scrivere in quel
linguaggio ;-)
Ciao.
    glfp

Ciao Gian Luca,
ti assicuro che sono innamorato del c++ (sia per la potenza, che per la
rigorosità), purtroppo Java (che io odio!) mi è stato imposto per l'esame di
Fondamenti di Informatica 1... che tristezza!
Ciao e grazie :-)
Gian Luca Farina Perseu <per...@to.atos.itNOSPAM> wrote in message
78ro5c$gtu$1...@serv1.iunet.it...


rigorosità)
A mio parere Java è quello più ordinato.
--
Bye,
  Dario
ICQ: 
http://wwp.mirabilis.com/11871099
Remove anti-spam from e-mail address