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:
Come posso scrivere le altre due visite?Grazie a tutticodice: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; }

					
					
					
						
  Rispondi quotando
 
						