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