Pages: [1]   Go Down
Print
Author Topic: visita inorder iterativa  (Read 1107 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
ottobit
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 186


!nope!


« on: 23-07-2009, 17:22:48 »

ciao a tutti ho riscontrato un problema nel capire il codice riguardante la visita inorder...

Code:
protected void iterInorder(){
     IntBTNodo p = root;
     Pila aiuto = new Pila();
     
      while (p != null){
              while (p != null){
                  // push figlio dx se esiste, e il nodo
                  // stesso procedendo verso sx
                      if (p.right != null) aiuto.push(p.right);
                           aiuto.push(p);
                                 p = p.left;
       }
e fino a qui ci siamo dato che inserisco in pila i figli dx prima delle varie radici e scorro verso sinistra...

Code:
p = (IntBTNodo) aiuto.pop();

while (!aiuto.isEmpty() && p.right == null){
     //visita nodo e tutti quelli senza figlio dx
          p.visit(); // da gestire !!
               p = (IntBTNodo) aiuto.pop();
}
in questo punto comincio a non capire,dato che se si prendono rigorosamente quei nodi
che non hanno figlio dx,si tralascia di stampare le radici che stanno in mezzo.......

esempio di albero : A ha figlio sinistro B e destro C.
                                B ha figlio sinistro D e destro E.
                                 C ha figlio sinistro F e destro G.

Quando nel secondo while vado ad estrarli,non estrarrò B che ha figlio destro!!!
Invece devo,poichè il risultato della inorder è ------> D,B,E,A,F,C,G.

grazie al Santo/Santa che risponderà.
ciao
Logged
ottobit
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 186


!nope!


« Reply #1 on: 25-07-2009, 14:28:48 »

........e qui le cose sono due......o la mia domanda è troppo stupida,o mi sono spiegato malissimo..

Grazie comunque.
Logged
8leoncina7
Apprendista Forumista
**
Offline Offline

Posts: 266



« Reply #2 on: 25-07-2009, 14:50:52 »

........e qui le cose sono due......o la mia domanda è troppo stupida,o mi sono spiegato malissimo..

Grazie comunque.

oppure nessuno lo sa spiegare 
Logged

meglio fare e pentirsi che non fare e pentirsi lo stesso..
                                                                Machiavelli
week86
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 174



WWW
« Reply #3 on: 25-07-2009, 16:01:11 »

scusami ma le radici vanno estratte (o visitate) nell'ultimo pezzo di codice che non hai riportato e che riporto qui sotto..

Code:
// visita anche il primo nodo con un figlio dx
p.visit();
if (!aiuto.isEmpty())
p = (IntBTNodo) aiuto.pop();
else p = null;
} // fine while più esterno
} // fine metodo

credo che il tuo dubbio era questo..
Logged
ottobit
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 186


!nope!


« Reply #4 on: 25-07-2009, 17:45:53 »

esatto....l'ho riletto un paio di volte (per modo di dire) e adesso credo di aver capito come funzionano i tre metodi di attraversamento.
Grazie infinite per le risposte.. ok
Logged
Pages: [1]   Go Up
Print
Jump to: