Visite Iterative di Alberi Binari
Visite Iterative di Alberi Binari
Visite Iterative di Alberi Binari
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Visite</strong> <strong>Iterative</strong> <strong>di</strong> <strong>Alberi</strong> <strong>Binari</strong>
Visita Iterativa PreOrder<br />
Visita-preorder-iter(T) {<br />
stack *st = NULL;<br />
node *curr = T;<br />
}<br />
WHILE (st ≠ NULL || curr ≠ NULL) {<br />
IF (curr ≠ NULL) { /* Visita e <strong>di</strong>scesa a sinistra */<br />
Visita(curr);<br />
st = push(st,curr);<br />
curr = curr->sx<br />
}<br />
ELSE { /* Discesa a destra */<br />
curr = top(st);<br />
st = pop(st);<br />
curr = curr->dx;<br />
}<br />
}
Visita-preorder-iter(T) {<br />
}<br />
stack *st = NULL;<br />
node *curr = T;<br />
WHILE (curr ≠ NULL) {<br />
}<br />
Visita(curr);<br />
Visita Iterativa PreOrder<br />
IF (curr->dx ≠ NULL)<br />
st = push(st,curr->dx); /* Salva il destro */<br />
IF (curr->sx ≠ NULL) /* Discesa a sinistra se possibile */<br />
curr = curr->sx;<br />
ELSE { /* Visita dell’ultimo sottoalbero destro */<br />
}<br />
IF (st ≠ NULL) { /* Recupera il fratello destro<br />
}<br />
ELSE<br />
curr = top(st);<br />
st = pop(st);<br />
dallo stack */<br />
curr = NULL; /* Visita terminata */
Visita Iterativa InOrder<br />
Visita-inorder-iter(T) {<br />
stack *st = NULL;<br />
node *curr = T;<br />
}<br />
WHILE (st ≠ NULL || curr ≠ NULL) {<br />
IF(curr ≠ NULL) { /* Discesa a sinistra */<br />
st = push(st,curr);<br />
curr = curr->sx;<br />
}<br />
ELSE { /* Risalita, visita nodo in stack e<br />
<strong>di</strong>scesa a destra */<br />
curr = top(st);<br />
st = pop(st);<br />
Visita(curr);<br />
curr = curr->dx;<br />
}<br />
}
Visita Iterativa PostOrder I<br />
Visita-postorder-iter(T) {<br />
}<br />
stack *st = NULL;<br />
node *last = NULL, *curr = T;<br />
WHILE (st ≠ NULL || curr ≠ NULL) {<br />
}<br />
IF (curr ≠ NULL) { /* Discesa lungo l’albero corrente */<br />
}<br />
st = push(st,curr);<br />
curr=curr->sx;<br />
ELSE { /* Risalita lungo l’albero */<br />
}<br />
curr=top(st);<br />
IF(curr->dx == NULL || curr->dx == last){ /* Risalita da destra */<br />
}<br />
Visita(curr);<br />
last = curr;<br />
st = pop(st);<br />
curr = NULL;<br />
ELSE curr = curr->dx; /* Risalita da sinistra */
Visita Iterativa PostOrder II<br />
Visita-postorder-iter(T) {<br />
stack *st = NULL;<br />
node *last = NULL, *curr = T;<br />
WHILE (st ≠ NULL || curr ≠ NULL) {<br />
IF (curr ≠ NULL) {<br />
}<br />
st = push(st,curr);<br />
curr=curr->sx;<br />
ELSE { /* Risalita lungo l’albero */<br />
}}}<br />
curr=top(st);<br />
IF (curr->dx == last) { /* Risalita da destra */<br />
}<br />
Visita(curr);<br />
last = curr;<br />
st = pop(st);<br />
curr=NULL;<br />
ELSE { /* Risalita da sinistra */<br />
curr = curr->dx;<br />
last = NULL;
Visita-postorder-iter(T) {<br />
stack *st = NULL;<br />
node *last = NULL, *curr = T;<br />
st = push(T)<br />
WHILE (st ≠ NULL) { /* Discesa lungo l’albero corrente */<br />
curr = top(st);<br />
IF (last == NULL || last->sx == curr || last->dx == curr) {<br />
}<br />
IF (curr->sx ≠ NULL)<br />
st = push(st,curr->sx);<br />
ELSE IF (curr->dx ≠ NULL)<br />
ELSE {<br />
}<br />
st = push(st,curr->dx);<br />
Visita(curr); st = pop(st);<br />
ELSE IF (last == curr->sx){ /* Risalita da sinistra */<br />
IF (curr->dx ≠ NULL)<br />
}<br />
st = push(st,curr->dx);<br />
ELSE {<br />
Visita(curr); st = pop(st);<br />
ELSE IF (last == curr->dx){ /* Risalita da destra */<br />
}<br />
Visita(curr); st = pop(st);<br />
last = curr; }}