Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Visite iterative albero binario

    Ragazzi qualcuno puņ gentilmente spiegarmi la versione iterativa delle visite inorder e preorder?La postorder mi funziona, ma le altre due non riesco a venirne a capo.
    Vi posto la mia postorder:
    codice:
    	public String iterPostorder()
    	{
    		String str="";
    		Stack<BSTNode<E>> aux=new Stack<BSTNode<E>>();
    		//simulo i due valori del flag 0 e 1 , con un doppio inserimento quindi inserendo due volte lo stesso valore nello stack
    		aux.push(root);
    		aux.push(root);
    		
    		//finchč la PILA NON č VUOTA
    		while(!aux.isEmpty())
    		{
    			BSTNode<E> temp=aux.pop();
    			// Se ho estratto un nodo "duplicato" (controllo se la cima č uguale a quello che ho 
    			// appena estratto oppure se ho finito lo stack), allora (ramo else) aggiungo i figli (sempre duplicandoli), altrimenti
    			// vuol dire che devo stampare il nodo.
    			if(aux.isEmpty() || aux.top() != temp)
    				str+=temp.getLabel().toString()+"\n";
    			else
    			{
    				// Poichč uso uno stack devo inserire i figli in ordine inverso (prima il right e poi il left)
    				// in modo che la pop() li estragga nell'ordine giusto (prima left e poi right), sempre usando
    				// il trucchetto della "duplicazione".
    				if(temp.getRight()!=null)
    				{
    					aux.push(temp.getRight());
    					aux.push(temp.getRight());
    				}
    				
    				if(temp.getLeft()!=null)
    				{
    					aux.push(temp.getLeft());
    					aux.push(temp.getLeft());
    				}
    			}
    		}
    		return str;
    	}
    Come posso scrivere le altre due visite?Grazie a tutti

  2. #2
    Per l'inorder ho risolto...nessuno mi są aiutare per la preorder?

  3. #3
    Puoi fare riferimento alle slide del prof Pulvirenti.

    codice:
    protected void iterPreorder(){
               IntBTNodo p = root;
                   Pila aiuto = new Pila();
                      if (p != null){
                       aiuto.push(p);
                         while (!aiuto.isEmpty()){
                          p = (IntBTNodo) aiuto.pop();
                          p.visit(); // da gestire !!
                          if (p.right != null) aiuto.push(p.right);
                          if (p.left != null) aiuto.push(p.left);
                           }
                        }
               }
    Se non ho capito male, siccome nella preorder visiti la radice, poi il sottoalbero sinistro e poi il destro, allora nello stack prima metti la radice, e poi, visto come funziona lo stack, inserisci prima il destro e poi il sinistro, cosģ togliendoli fuori li visiterai come ti sercono.

  4. #4
    si si, qui c'ero arrivata anche'io perņ non mi legge i nodi secondo una preorder...sto perdendo la pazienza con sta materiaaaaaa

  5. #5
    A chi lo dici......XD

    Non te li legge?
    Mh....strano, non l'ho mai provato, quindi non funziona come dovrebbe?
    Alcuni dicevano che le slide erano errate......
    Mh....dopo aver risolto il mio problema con comparable....se posti il codice.....potrei darci un' occhiata...per curiositą, premettendo che sono pił schiappa e lo sai..

  6. #6
    Ti ringrazio ma ieri sera ho risolto pure il problema con la preorder :-)

  7. #7
    Ah bene bene meglio cosģ, ma alla fine come hai fatto?
    Cioč l'errore era un altro oppure il codice che ti avevo postato non funziona?
    In caso se il problema č l'algoritmo preorder che č sbagliato mi puoi dire che modifiche hai fatto perchč sennņ non funziona nemmeno a me
    Grazie per la risposta all'altro mio intervento, stasera provo a risolvere e ti faccio sapere.

  8. #8
    No no quello di Pulvirenti non funziona proprio. Mi sono fatta il disegnino io su un foglio e ho iniziato a ragionare e l'ho scritto proprio tutto nuovo il programma.

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.