12.08.2013 Views

Visite Iterative di Alberi Binari

Visite Iterative di Alberi Binari

Visite Iterative di Alberi Binari

SHOW MORE
SHOW LESS

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; }}

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!