Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di adp
    Registrato dal
    Oct 2008
    Messaggi
    87

    visita postorder di un albero

    Salve ragazzi, voglio stampare tutti gli elementi di un albero del genere:
    utilizzando una visita postorder:
    /**
    * 0
    * / / \ \
    * 1 2 3 4
    * / \ | / \ \
    * 11 111 22 33 333 44
    * / \
    * 32 34
    *
    ho impostato cosi il mio Codice:
    codice:
    public static void postorder(Tree<Integer>T, Position<Integer> root){
          if(T.isExternal(root)){//parto dalla radice, verifico se il nodo è esterno
             
             return;
          }else
          for(Position<Integer> figli:T.children(root)){//altrimenti ciclo sui figli         
             postorder(T,figli);//richiamo la funzione
          
             System.out.println("elemento"+root.element());//stampo gli elementi
          }
          }}
    ce un unico problema che cosi nn mi stampa mai le foglie, ma appena trova un nodo che è foglia, risale al padre e me lo stampa 2 volte, se cambio
    codice:
     if(T.isExternal(root)){, con if(T.isInternal(root))
    { non mi stampa nulla, xchè c'è la condizione di uscita, ma esiste un metodo generale che funzioni qualsiasi sia il mio scopo del programma?? in una visita postorer cosa è giusto verificare se il nodo è interno o se il nodo è esterno?? grazie!
    Adp

  2. #2
    Utente di HTML.it L'avatar di adp
    Registrato dal
    Oct 2008
    Messaggi
    87
    codice:
    public static <E> void postorder(Tree<E>T, Position<E> v,PositionList<Position<E>> lista)throws InvalidPositionException{
       /*   if(T.isInternal(v)) {
              for(Position<E> figli:T.children(v))//altrimenti ciclo sui figli         
                 postorder(T,figli,lista);
          }
          lista.addLast(v);
          return;*/
          if(T.isExternal(v)) {
             lista.addLast(v);
             return;
          }
          for(Position<E> figli:T.children(v))//altrimenti ciclo sui figli         
              postorder(T,figli,lista);
             lista.addLast(v);
       }
    se provo a fare cosi fa sempre la stessa cosa mi stampa i nodi centrali poi i figli e poi la radice, un casino in pratica!


    coem posso risolvere!
    Adp

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.